Merge pull request #980 from NvrBst/pull-request-upnp_description
authorJo-Philipp Wich <jo@mein.io>
Fri, 10 Nov 2017 12:06:10 +0000 (13:06 +0100)
committerGitHub <noreply@github.com>
Fri, 10 Nov 2017 12:06:10 +0000 (13:06 +0100)
luci-app-upnp: Adding and displaying "Description" to upnp data

583 files changed:
applications/luci-app-adblock/Makefile
applications/luci-app-adblock/luasrc/controller/adblock.lua
applications/luci-app-adblock/luasrc/model/cbi/adblock.lua [deleted file]
applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua [new file with mode: 0644]
applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua [new file with mode: 0644]
applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua [new file with mode: 0644]
applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua [new file with mode: 0644]
applications/luci-app-adblock/luasrc/view/adblock/config_css.htm [new file with mode: 0644]
applications/luci-app-adblock/luasrc/view/adblock/logread.htm [new file with mode: 0644]
applications/luci-app-adblock/luasrc/view/adblock/query.htm [new file with mode: 0644]
applications/luci-app-adblock/luasrc/view/adblock/runtime.htm [new file with mode: 0644]
applications/luci-app-adblock/po/it/adblock.po [new file with mode: 0644]
applications/luci-app-adblock/po/ja/adblock.po
applications/luci-app-adblock/po/pt-br/adblock.po [new file with mode: 0644]
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-adblock/po/zh-tw/adblock.po [new file with mode: 0644]
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/sv/luci-app-advanced-reboot.po [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-ahcp/po/pt-br/ahcp.po
applications/luci-app-ahcp/po/sv/ahcp.po
applications/luci-app-aria2/po/pt-br/aria2.po [new file with mode: 0644]
applications/luci-app-aria2/po/sv/aria2.po [new file with mode: 0644]
applications/luci-app-aria2/po/zh-cn/aria2.po
applications/luci-app-aria2/po/zh-tw/aria2.po [new file with mode: 0644]
applications/luci-app-attendedsysupgrade/Makefile [new file with mode: 0644]
applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua [new file with mode: 0644]
applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm [new file with mode: 0644]
applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade [new file with mode: 0755]
applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json [new file with mode: 0644]
applications/luci-app-bcp38/Makefile [new file with mode: 0644]
applications/luci-app-bcp38/luasrc/controller/bcp38.lua [new file with mode: 0644]
applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua [new file with mode: 0644]
applications/luci-app-bcp38/po/sv/bcp38.po [new file with mode: 0644]
applications/luci-app-bcp38/po/templates/bcp38.pot [new file with mode: 0644]
applications/luci-app-bcp38/po/zh-cn/bcp38.po [new file with mode: 0644]
applications/luci-app-bcp38/po/zh-tw/bcp38.po [new file with mode: 0644]
applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 [new file with mode: 0755]
applications/luci-app-clamav/Makefile [new file with mode: 0644]
applications/luci-app-clamav/luasrc/controller/clamav.lua [new file with mode: 0644]
applications/luci-app-clamav/luasrc/model/cbi/clamav.lua [new file with mode: 0644]
applications/luci-app-clamav/po/ja/clamav.po [new file with mode: 0644]
applications/luci-app-clamav/po/sv/clamav.po [new file with mode: 0644]
applications/luci-app-clamav/po/templates/clamav.pot [new file with mode: 0644]
applications/luci-app-clamav/po/zh-cn/clamav.po [new file with mode: 0644]
applications/luci-app-commands/Makefile
applications/luci-app-commands/po/pt-br/commands.po
applications/luci-app-commands/po/sv/commands.po
applications/luci-app-commands/po/zh-tw/commands.po
applications/luci-app-coovachilli/po/sv/coovachilli.po
applications/luci-app-cshark/Makefile [new file with mode: 0644]
applications/luci-app-cshark/luasrc/controller/cshark.lua [new file with mode: 0644]
applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua [new file with mode: 0644]
applications/luci-app-cshark/luasrc/view/cshark.htm [new file with mode: 0644]
applications/luci-app-ddns/Makefile
applications/luci-app-ddns/luasrc/controller/ddns.lua
applications/luci-app-ddns/po/it/ddns.po
applications/luci-app-ddns/po/pt-br/ddns.po
applications/luci-app-ddns/po/sv/ddns.po [new file with mode: 0644]
applications/luci-app-ddns/po/zh-cn/ddns.po
applications/luci-app-ddns/po/zh-tw/ddns.po
applications/luci-app-diag-core/po/sv/diag_core.po
applications/luci-app-diag-core/po/zh-tw/diag_core.po
applications/luci-app-diag-devinfo/po/sv/diag_devinfo.po
applications/luci-app-dnscrypt-proxy/Makefile [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot [new file with mode: 0644]
applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy [new file with mode: 0755]
applications/luci-app-dynapoint/Makefile
applications/luci-app-dynapoint/po/pt-br/dynapoint.po [new file with mode: 0644]
applications/luci-app-e2guardian/Makefile [new file with mode: 0644]
applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua [new file with mode: 0644]
applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua [new file with mode: 0644]
applications/luci-app-firewall/Makefile
applications/luci-app-firewall/luasrc/model/cbi/firewall/custom.lua
applications/luci-app-firewall/luasrc/model/cbi/firewall/zone-details.lua
applications/luci-app-firewall/luasrc/model/cbi/firewall/zones.lua
applications/luci-app-firewall/po/ca/firewall.po
applications/luci-app-firewall/po/cs/firewall.po
applications/luci-app-firewall/po/de/firewall.po
applications/luci-app-firewall/po/el/firewall.po
applications/luci-app-firewall/po/en/firewall.po
applications/luci-app-firewall/po/es/firewall.po
applications/luci-app-firewall/po/fr/firewall.po
applications/luci-app-firewall/po/he/firewall.po
applications/luci-app-firewall/po/hu/firewall.po
applications/luci-app-firewall/po/it/firewall.po
applications/luci-app-firewall/po/ja/firewall.po
applications/luci-app-firewall/po/ko/firewall.po
applications/luci-app-firewall/po/ms/firewall.po
applications/luci-app-firewall/po/no/firewall.po
applications/luci-app-firewall/po/pl/firewall.po
applications/luci-app-firewall/po/pt-br/firewall.po
applications/luci-app-firewall/po/pt/firewall.po
applications/luci-app-firewall/po/ro/firewall.po
applications/luci-app-firewall/po/ru/firewall.po
applications/luci-app-firewall/po/sk/firewall.po
applications/luci-app-firewall/po/sv/firewall.po
applications/luci-app-firewall/po/templates/firewall.pot
applications/luci-app-firewall/po/tr/firewall.po
applications/luci-app-firewall/po/uk/firewall.po
applications/luci-app-firewall/po/vi/firewall.po
applications/luci-app-firewall/po/zh-cn/firewall.po
applications/luci-app-firewall/po/zh-tw/firewall.po
applications/luci-app-freifunk-policyrouting/po/zh-cn/freifunk-policyrouting.po
applications/luci-app-fwknopd/Makefile
applications/luci-app-fwknopd/po/pt-br/fwknopd.po [new file with mode: 0644]
applications/luci-app-fwknopd/root/etc/uci-defaults/40_luci-fwknopd
applications/luci-app-fwknopd/root/usr/sbin/gen-qr.sh
applications/luci-app-hd-idle/luasrc/controller/hd_idle.lua
applications/luci-app-hd-idle/luasrc/model/cbi/hd_idle.lua
applications/luci-app-hd-idle/po/ca/hd_idle.po
applications/luci-app-hd-idle/po/cs/hd_idle.po
applications/luci-app-hd-idle/po/de/hd_idle.po
applications/luci-app-hd-idle/po/el/hd_idle.po
applications/luci-app-hd-idle/po/en/hd_idle.po
applications/luci-app-hd-idle/po/es/hd_idle.po
applications/luci-app-hd-idle/po/fr/hd_idle.po
applications/luci-app-hd-idle/po/he/hd_idle.po
applications/luci-app-hd-idle/po/hu/hd_idle.po
applications/luci-app-hd-idle/po/it/hd_idle.po
applications/luci-app-hd-idle/po/ja/hd_idle.po
applications/luci-app-hd-idle/po/ms/hd_idle.po
applications/luci-app-hd-idle/po/no/hd_idle.po
applications/luci-app-hd-idle/po/pl/hd_idle.po
applications/luci-app-hd-idle/po/pt-br/hd_idle.po
applications/luci-app-hd-idle/po/pt/hd_idle.po
applications/luci-app-hd-idle/po/ro/hd_idle.po
applications/luci-app-hd-idle/po/ru/hd_idle.po
applications/luci-app-hd-idle/po/sk/hd_idle.po
applications/luci-app-hd-idle/po/sv/hd_idle.po
applications/luci-app-hd-idle/po/templates/hd_idle.pot
applications/luci-app-hd-idle/po/tr/hd_idle.po
applications/luci-app-hd-idle/po/uk/hd_idle.po
applications/luci-app-hd-idle/po/vi/hd_idle.po
applications/luci-app-hd-idle/po/zh-cn/hd_idle.po
applications/luci-app-hd-idle/po/zh-tw/hd_idle.po
applications/luci-app-lxc/Makefile [new file with mode: 0644]
applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif [new file with mode: 0644]
applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif [new file with mode: 0644]
applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif [new file with mode: 0644]
applications/luci-app-lxc/luasrc/controller/lxc.lua [new file with mode: 0644]
applications/luci-app-lxc/luasrc/model/cbi/lxc.lua [new file with mode: 0644]
applications/luci-app-lxc/luasrc/view/lxc.htm [new file with mode: 0644]
applications/luci-app-lxc/root/etc/config/lxc [new file with mode: 0644]
applications/luci-app-meshwizard/luasrc/model/cbi/freifunk/meshwizard.lua
applications/luci-app-meshwizard/po/pt-br/meshwizard.po
applications/luci-app-meshwizard/po/zh-cn/meshwizard.po
applications/luci-app-minidlna/luasrc/model/cbi/minidlna.lua
applications/luci-app-minidlna/po/ca/minidlna.po
applications/luci-app-minidlna/po/cs/minidlna.po
applications/luci-app-minidlna/po/de/minidlna.po
applications/luci-app-minidlna/po/el/minidlna.po
applications/luci-app-minidlna/po/en/minidlna.po
applications/luci-app-minidlna/po/es/minidlna.po
applications/luci-app-minidlna/po/fr/minidlna.po
applications/luci-app-minidlna/po/he/minidlna.po
applications/luci-app-minidlna/po/hu/minidlna.po
applications/luci-app-minidlna/po/it/minidlna.po
applications/luci-app-minidlna/po/ja/minidlna.po
applications/luci-app-minidlna/po/ms/minidlna.po
applications/luci-app-minidlna/po/no/minidlna.po
applications/luci-app-minidlna/po/pl/minidlna.po
applications/luci-app-minidlna/po/pt-br/minidlna.po
applications/luci-app-minidlna/po/pt/minidlna.po
applications/luci-app-minidlna/po/ro/minidlna.po
applications/luci-app-minidlna/po/ru/minidlna.po
applications/luci-app-minidlna/po/sk/minidlna.po
applications/luci-app-minidlna/po/sv/minidlna.po
applications/luci-app-minidlna/po/templates/minidlna.pot
applications/luci-app-minidlna/po/tr/minidlna.po
applications/luci-app-minidlna/po/uk/minidlna.po
applications/luci-app-minidlna/po/vi/minidlna.po
applications/luci-app-minidlna/po/zh-cn/minidlna.po
applications/luci-app-minidlna/po/zh-tw/minidlna.po
applications/luci-app-minidlna/root/etc/uci-defaults/40_luci-minidlna
applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po [new file with mode: 0644]
applications/luci-app-mwan3/Makefile [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/controller/mwan3.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm [new file with mode: 0644]
applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm [new file with mode: 0644]
applications/luci-app-mwan3/po/ja/mwan3.po [new file with mode: 0644]
applications/luci-app-mwan3/po/templates/mwan3.pot [new file with mode: 0644]
applications/luci-app-mwan3/po/zh-cn/mwan3.po [new file with mode: 0644]
applications/luci-app-mwan3/po/zh-tw/mwan3.po [new file with mode: 0644]
applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak [new file with mode: 0755]
applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 [new file with mode: 0755]
applications/luci-app-nlbwmon/Makefile [new file with mode: 0644]
applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js [new file with mode: 0644]
applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua [new file with mode: 0644]
applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua [new file with mode: 0644]
applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm [new file with mode: 0644]
applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm [new file with mode: 0644]
applications/luci-app-nlbwmon/po/ja/nlbwmon.po [new file with mode: 0644]
applications/luci-app-nlbwmon/po/templates/nlbwmon.pot [new file with mode: 0644]
applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po [new file with mode: 0644]
applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon [new file with mode: 0644]
applications/luci-app-noddos/Makefile [new file with mode: 0644]
applications/luci-app-noddos/htdocs/cgi-bin/clientdetails [new file with mode: 0755]
applications/luci-app-noddos/luasrc/controller/noddos.lua [new file with mode: 0644]
applications/luci-app-noddos/luasrc/model/cbi/noddos.lua [new file with mode: 0644]
applications/luci-app-noddos/luasrc/view/noddos/clients.htm [new file with mode: 0644]
applications/luci-app-noddos/po/ja/noddos.po [new file with mode: 0644]
applications/luci-app-noddos/po/templates/noddos.pot [new file with mode: 0644]
applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos [new file with mode: 0644]
applications/luci-app-olsr/po/pt-br/olsr.po
applications/luci-app-openvpn/luasrc/model/cbi/openvpn-advanced.lua
applications/luci-app-openvpn/luasrc/model/cbi/openvpn-basic.lua
applications/luci-app-openvpn/po/ca/openvpn.po
applications/luci-app-openvpn/po/cs/openvpn.po
applications/luci-app-openvpn/po/de/openvpn.po
applications/luci-app-openvpn/po/el/openvpn.po
applications/luci-app-openvpn/po/en/openvpn.po
applications/luci-app-openvpn/po/es/openvpn.po
applications/luci-app-openvpn/po/fr/openvpn.po
applications/luci-app-openvpn/po/he/openvpn.po
applications/luci-app-openvpn/po/hu/openvpn.po
applications/luci-app-openvpn/po/it/openvpn.po
applications/luci-app-openvpn/po/ja/openvpn.po
applications/luci-app-openvpn/po/ms/openvpn.po
applications/luci-app-openvpn/po/no/openvpn.po
applications/luci-app-openvpn/po/pl/openvpn.po
applications/luci-app-openvpn/po/pt-br/openvpn.po
applications/luci-app-openvpn/po/pt/openvpn.po
applications/luci-app-openvpn/po/ro/openvpn.po
applications/luci-app-openvpn/po/ru/openvpn.po
applications/luci-app-openvpn/po/sk/openvpn.po
applications/luci-app-openvpn/po/sv/openvpn.po
applications/luci-app-openvpn/po/templates/openvpn.pot
applications/luci-app-openvpn/po/tr/openvpn.po
applications/luci-app-openvpn/po/uk/openvpn.po
applications/luci-app-openvpn/po/vi/openvpn.po
applications/luci-app-openvpn/po/zh-cn/openvpn.po
applications/luci-app-openvpn/po/zh-tw/openvpn.po
applications/luci-app-p2pblock/po/pt-br/p2pblock.po
applications/luci-app-p910nd/po/zh-tw/p910nd.po
applications/luci-app-pbx-voicemail/po/zh-cn/pbx-voicemail.po
applications/luci-app-pbx-voicemail/po/zh-tw/pbx-voicemail.po
applications/luci-app-pbx/po/zh-cn/pbx.po
applications/luci-app-pbx/po/zh-tw/pbx.po
applications/luci-app-polipo/po/zh-cn/polipo.po
applications/luci-app-polipo/po/zh-tw/polipo.po
applications/luci-app-privoxy/Makefile
applications/luci-app-privoxy/po/pt-br/privoxy.po [new file with mode: 0644]
applications/luci-app-privoxy/po/zh-cn/privoxy.po
applications/luci-app-qos/Makefile
applications/luci-app-qos/po/zh-cn/qos.po
applications/luci-app-qos/po/zh-tw/qos.po
applications/luci-app-radicale/po/pt-br/radicale.po [new file with mode: 0644]
applications/luci-app-radvd/po/zh-cn/radvd.po
applications/luci-app-radvd/po/zh-tw/radvd.po
applications/luci-app-samba/luasrc/model/cbi/samba.lua
applications/luci-app-samba/po/ca/samba.po
applications/luci-app-samba/po/cs/samba.po
applications/luci-app-samba/po/de/samba.po
applications/luci-app-samba/po/el/samba.po
applications/luci-app-samba/po/en/samba.po
applications/luci-app-samba/po/es/samba.po
applications/luci-app-samba/po/fr/samba.po
applications/luci-app-samba/po/he/samba.po
applications/luci-app-samba/po/hu/samba.po
applications/luci-app-samba/po/it/samba.po
applications/luci-app-samba/po/ja/samba.po
applications/luci-app-samba/po/ms/samba.po
applications/luci-app-samba/po/no/samba.po
applications/luci-app-samba/po/pl/samba.po
applications/luci-app-samba/po/pt-br/samba.po
applications/luci-app-samba/po/pt/samba.po
applications/luci-app-samba/po/ro/samba.po
applications/luci-app-samba/po/ru/samba.po
applications/luci-app-samba/po/sk/samba.po
applications/luci-app-samba/po/sv/samba.po
applications/luci-app-samba/po/templates/samba.pot
applications/luci-app-samba/po/tr/samba.po
applications/luci-app-samba/po/uk/samba.po
applications/luci-app-samba/po/vi/samba.po
applications/luci-app-samba/po/zh-cn/samba.po
applications/luci-app-samba/po/zh-tw/samba.po
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/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-shairplay/po/pt-br/shairplay.po [new file with mode: 0644]
applications/luci-app-simple-adblock/Makefile [new file with mode: 0644]
applications/luci-app-simple-adblock/luasrc/controller/simpleadblock.lua [new file with mode: 0644]
applications/luci-app-simple-adblock/luasrc/model/cbi/simpleadblock.lua [new file with mode: 0644]
applications/luci-app-simple-adblock/po/ja/simple-adblock.po [new file with mode: 0644]
applications/luci-app-simple-adblock/po/pt-br/simple-adblock.po [new file with mode: 0644]
applications/luci-app-simple-adblock/po/pt/simple-adblock.po [new file with mode: 0644]
applications/luci-app-simple-adblock/po/sv/simple-adblock.po [new file with mode: 0644]
applications/luci-app-simple-adblock/po/templates/simple-adblock.pot [new file with mode: 0644]
applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock [new file with mode: 0644]
applications/luci-app-splash/po/sv/splash.po
applications/luci-app-splash/po/zh-cn/splash.po
applications/luci-app-squid/Makefile [new file with mode: 0644]
applications/luci-app-squid/luasrc/controller/squid.lua [new file with mode: 0644]
applications/luci-app-squid/luasrc/model/cbi/squid.lua [new file with mode: 0644]
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/model/cbi/luci_statistics/contextswitch.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/luasrc/statistics/rrdtool/definitions/contextswitch.lua [new file with mode: 0644]
applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/processes.lua
applications/luci-app-statistics/luasrc/view/public_statistics/graph.htm
applications/luci-app-statistics/po/ca/statistics.po
applications/luci-app-statistics/po/cs/statistics.po
applications/luci-app-statistics/po/de/statistics.po
applications/luci-app-statistics/po/el/statistics.po
applications/luci-app-statistics/po/en/statistics.po
applications/luci-app-statistics/po/es/statistics.po
applications/luci-app-statistics/po/fr/statistics.po
applications/luci-app-statistics/po/he/statistics.po
applications/luci-app-statistics/po/hu/statistics.po
applications/luci-app-statistics/po/it/statistics.po
applications/luci-app-statistics/po/ja/statistics.po
applications/luci-app-statistics/po/ms/statistics.po
applications/luci-app-statistics/po/no/statistics.po
applications/luci-app-statistics/po/pl/statistics.po
applications/luci-app-statistics/po/pt-br/statistics.po
applications/luci-app-statistics/po/pt/statistics.po
applications/luci-app-statistics/po/ro/statistics.po
applications/luci-app-statistics/po/ru/statistics.po
applications/luci-app-statistics/po/sk/statistics.po
applications/luci-app-statistics/po/sv/statistics.po
applications/luci-app-statistics/po/templates/statistics.pot
applications/luci-app-statistics/po/tr/statistics.po
applications/luci-app-statistics/po/uk/statistics.po
applications/luci-app-statistics/po/vi/statistics.po
applications/luci-app-statistics/po/zh-cn/rrdtool.po
applications/luci-app-statistics/po/zh-cn/statistics.po
applications/luci-app-statistics/po/zh-tw/rrdtool.po
applications/luci-app-statistics/po/zh-tw/statistics.po
applications/luci-app-statistics/root/etc/config/luci_statistics
applications/luci-app-statistics/root/usr/bin/stat-genconfig
applications/luci-app-transmission/po/zh-cn/transmission.po
applications/luci-app-transmission/po/zh-tw/transmission.po
applications/luci-app-travelmate/Makefile
applications/luci-app-travelmate/luasrc/controller/travelmate.lua
applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua [deleted file]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm [new file with mode: 0644]
applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm [new file with mode: 0644]
applications/luci-app-travelmate/po/ja/travelmate.po
applications/luci-app-travelmate/po/pt-br/travelmate.po [new file with mode: 0644]
applications/luci-app-travelmate/po/templates/travelmate.pot
applications/luci-app-uhttpd/Makefile
applications/luci-app-uhttpd/luasrc/model/cbi/uhttpd/uhttpd.lua
applications/luci-app-uhttpd/po/pt-br/uhttpd.po [new file with mode: 0644]
applications/luci-app-unbound/luasrc/controller/unbound.lua
applications/luci-app-unbound/luasrc/model/cbi/unbound.lua [deleted file]
applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua [new file with mode: 0644]
applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua [new file with mode: 0644]
applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua [new file with mode: 0644]
applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua [new file with mode: 0644]
applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm [new file with mode: 0644]
applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm [new file with mode: 0644]
applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm [new file with mode: 0644]
applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound [new file with mode: 0644]
applications/luci-app-upnp/luasrc/model/cbi/upnp/upnp.lua
applications/luci-app-upnp/po/zh-cn/upnp.po
applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp [new file with mode: 0755]
applications/luci-app-voice-diag/po/zh-tw/voice_diag.po
applications/luci-app-vpnbypass/Makefile
applications/luci-app-vpnbypass/luasrc/controller/vpnbypass.lua
applications/luci-app-vpnbypass/luasrc/model/cbi/vpnbypass.lua
applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po [new file with mode: 0644]
applications/luci-app-vpnbypass/po/templates/vpnbypass.pot [new file with mode: 0644]
applications/luci-app-vpnbypass/po/zh-cn/vpnbypass.po [new file with mode: 0644]
applications/luci-app-vpnbypass/po/zh-tw/vpnbypass.po [new file with mode: 0644]
applications/luci-app-watchcat/po/pt-br/watchcat.po
applications/luci-app-watchcat/po/sv/watchcat.po
applications/luci-app-watchcat/po/zh-cn/watchcat.po
applications/luci-app-wifischedule/po/it/wifischedule.po [new file with mode: 0644]
applications/luci-app-wifischedule/po/pt-br/wifischedule.po [new file with mode: 0644]
applications/luci-app-wifischedule/po/sv/wifischedule.po [new file with mode: 0644]
applications/luci-app-wireguard/Makefile [new file with mode: 0644]
applications/luci-app-wireguard/luasrc/controller/wireguard.lua [new file with mode: 0644]
applications/luci-app-wireguard/luasrc/view/wireguard.htm [new file with mode: 0644]
applications/luci-app-wireguard/po/ja/wireguard.po [new file with mode: 0644]
applications/luci-app-wireguard/po/pt-br/wireguard.po [new file with mode: 0644]
applications/luci-app-wireguard/po/sv/wireguard.po [new file with mode: 0644]
applications/luci-app-wireguard/po/templates/wireguard.pot [new file with mode: 0644]
applications/luci-app-wireguard/po/zh-cn/wireguard.po [new file with mode: 0644]
applications/luci-app-wol/po/it/wol.po
applications/luci-app-wol/po/pt-br/wol.po
applications/luci-app-wol/po/sv/wol.po
applications/luci-app-wol/po/zh-cn/wol.po
applications/luci-app-wol/po/zh-tw/wol.po
applications/luci-app-wshaper/Makefile [deleted file]
applications/luci-app-wshaper/luasrc/controller/wshaper.lua [deleted file]
applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua [deleted file]
applications/luci-app-wshaper/po/ca/wshaper.po [deleted file]
applications/luci-app-wshaper/po/cs/wshaper.po [deleted file]
applications/luci-app-wshaper/po/de/wshaper.po [deleted file]
applications/luci-app-wshaper/po/el/wshaper.po [deleted file]
applications/luci-app-wshaper/po/en/wshaper.po [deleted file]
applications/luci-app-wshaper/po/es/wshaper.po [deleted file]
applications/luci-app-wshaper/po/fr/wshaper.po [deleted file]
applications/luci-app-wshaper/po/he/wshaper.po [deleted file]
applications/luci-app-wshaper/po/hu/wshaper.po [deleted file]
applications/luci-app-wshaper/po/it/wshaper.po [deleted file]
applications/luci-app-wshaper/po/ja/wshaper.po [deleted file]
applications/luci-app-wshaper/po/ms/wshaper.po [deleted file]
applications/luci-app-wshaper/po/no/wshaper.po [deleted file]
applications/luci-app-wshaper/po/pl/wshaper.po [deleted file]
applications/luci-app-wshaper/po/pt-br/wshaper.po [deleted file]
applications/luci-app-wshaper/po/pt/wshaper.po [deleted file]
applications/luci-app-wshaper/po/ro/wshaper.po [deleted file]
applications/luci-app-wshaper/po/ru/wshaper.po [deleted file]
applications/luci-app-wshaper/po/sk/wshaper.po [deleted file]
applications/luci-app-wshaper/po/sv/wshaper.po [deleted file]
applications/luci-app-wshaper/po/templates/wshaper.pot [deleted file]
applications/luci-app-wshaper/po/tr/wshaper.po [deleted file]
applications/luci-app-wshaper/po/uk/wshaper.po [deleted file]
applications/luci-app-wshaper/po/vi/wshaper.po [deleted file]
applications/luci-app-wshaper/po/zh-cn/wshaper.po [deleted file]
applications/luci-app-wshaper/po/zh-tw/wshaper.po [deleted file]
applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper [deleted file]
build/zoneinfo2lua.pl
collections/luci-ssl-openssl/Makefile
collections/luci-ssl/Makefile
collections/luci/Makefile
contrib/package/community-profiles/files/etc/config/profile_potsdam
contrib/package/freifunk-common/Makefile
contrib/package/freifunk-common/files/etc/config/freifunk
contrib/package/meshwizard/Makefile
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/rename-wifi.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_olsrd.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/setup_wifi.sh
contrib/package/meshwizard/files/usr/bin/meshwizard/helpers/supports_vap.sh
contrib/package/remote-update/Makefile [deleted file]
contrib/package/remote-update/files/usr/sbin/remote-update [deleted file]
libs/luci-lib-ip/Makefile
libs/luci-lib-json/Makefile
libs/luci-lib-nixio/Makefile
libs/luci-lib-nixio/src/fs.c
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]
luci.mk
modules/luci-base/Makefile
modules/luci-base/htdocs/luci-static/resources/cbi.js
modules/luci-base/htdocs/luci-static/resources/xhr.js
modules/luci-base/luasrc/cbi/datatypes.lua
modules/luci-base/luasrc/dispatcher.lua
modules/luci-base/luasrc/http.lua
modules/luci-base/luasrc/http/protocol.lua
modules/luci-base/luasrc/model/cbi/admin_network/proto_static.lua
modules/luci-base/luasrc/model/firewall.lua
modules/luci-base/luasrc/model/network.lua
modules/luci-base/luasrc/sys.lua
modules/luci-base/luasrc/sys/zoneinfo/tzdata.lua
modules/luci-base/luasrc/sys/zoneinfo/tzoffset.lua
modules/luci-base/luasrc/tools/status.lua
modules/luci-base/luasrc/view/cbi/firewall_zoneforwards.htm
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/network.lua
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/network.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-full/luasrc/model/cbi/admin_system/crontab.lua
modules/luci-mod-admin-full/luasrc/model/cbi/admin_system/leds.lua
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_overview.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/iface_status.htm
modules/luci-mod-admin-full/luasrc/view/admin_network/wifi_overview.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/connections.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/dmesg.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/index.htm
modules/luci-mod-admin-full/luasrc/view/admin_status/syslog.htm
modules/luci-mod-admin-full/src/luci-bwc.c
modules/luci-mod-admin-mini/luasrc/model/cbi/mini/network.lua
modules/luci-mod-admin-mini/luasrc/model/cbi/mini/wifi.lua
modules/luci-mod-freifunk/luasrc/controller/freifunk/freifunk.lua
modules/luci-mod-freifunk/po/zh-cn/freifunk.po
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-ncm/Makefile [new file with mode: 0644]
protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua [new file with mode: 0644]
protocols/luci-proto-ncm/luasrc/model/network/proto_ncm.lua [new file with mode: 0644]
protocols/luci-proto-openconnect/luasrc/model/cbi/admin_network/proto_openconnect.lua
protocols/luci-proto-ppp/Makefile
protocols/luci-proto-vpnc/Makefile
protocols/luci-proto-vpnc/luasrc/model/cbi/admin_network/proto_vpnc.lua
protocols/luci-proto-wireguard/Makefile
protocols/luci-proto-wireguard/luasrc/model/cbi/admin_network/proto_wireguard.lua
themes/luci-theme-bootstrap/Makefile
themes/luci-theme-bootstrap/luasrc/view/themes/bootstrap/header.htm
themes/luci-theme-freifunk-generic/luasrc/view/themes/freifunk-generic/header.htm
themes/luci-theme-material/luasrc/view/themes/material/header.htm [changed mode: 0755->0644]
themes/luci-theme-openwrt/luasrc/view/themes/openwrt.org/header.htm

index 8efe2d6..ae1eba2 100644 (file)
@@ -1,14 +1,12 @@
-# Copyright (C) 2016 Openwrt.org
-#
-# This is free software, licensed under the Apache License, Version 2.0 .
-#
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
 
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=LuCI support for Adblock
-LUCI_DEPENDS:=+adblock
+LUCI_DEPENDS:=+adblock +luci-lib-jsonc
 LUCI_PKGARCH:=all
 
 include ../../luci.mk
 
-# call BuildPackage - OpenWrt buildroot signature
+# call BuildPackage - OpenWrt buildroot signature
\ No newline at end of file
index d8b4718..b748584 100644 (file)
@@ -1,12 +1,54 @@
--- Copyright 2016 Openwrt.org
--- Licensed to the public under the Apache License 2.0.
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
 
 module("luci.controller.adblock", package.seeall)
 
+local fs    = require("nixio.fs")
+local util  = require("luci.util")
+local templ = require("luci.template")
+local i18n  = require("luci.i18n")
+
 function index()
        if not nixio.fs.access("/etc/config/adblock") then
                return
        end
+       entry({"admin", "services", "adblock"}, firstchild(), _("Adblock"), 30).dependent = false
+       entry({"admin", "services", "adblock", "tab_from_cbi"}, cbi("adblock/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+       entry({"admin", "services", "adblock", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+       entry({"admin", "services", "adblock", "advanced"}, firstchild(), _("Advanced"), 100)
+       entry({"admin", "services", "adblock", "advanced", "blacklist"}, cbi("adblock/blacklist_tab"), _("Edit Blacklist"), 110).leaf = true
+       entry({"admin", "services", "adblock", "advanced", "whitelist"}, cbi("adblock/whitelist_tab"), _("Edit Whitelist"), 120).leaf = true
+       entry({"admin", "services", "adblock", "advanced", "configuration"}, cbi("adblock/configuration_tab"), _("Edit Configuration"), 130).leaf = true
+       entry({"admin", "services", "adblock", "advanced", "query"}, template("adblock/query"), _("Query domains"), 140).leaf = true
+       entry({"admin", "services", "adblock", "advanced", "result"}, call("queryData"), nil, 150).leaf = true
+end
 
-       entry({"admin", "services", "adblock"}, cbi("adblock"), _("Adblock"), 40)
+function logread()
+       local logfile
+
+       if nixio.fs.access("/var/log/messages") then
+               logfile = util.trim(util.exec("cat /var/log/messages | grep 'adblock'"))
+       else
+               logfile = util.trim(util.exec("logread -e 'adblock'"))
+       end
+       templ.render("adblock/logread", {title = i18n.translate("Adblock Logfile"), content = logfile})
+end
+
+function queryData(domain)
+       if domain and domain:match("^[a-zA-Z0-9%-%._]+$") then
+               luci.http.prepare_content("text/plain")
+               local cmd = "/etc/init.d/adblock query %q 2>&1"
+               local util = io.popen(cmd % domain)
+               if util then
+                       while true do
+                               local line = util:read("*l")
+                               if not line then
+                                       break
+                               end
+                               luci.http.write(line)
+                               luci.http.write("\n")
+                       end
+                       util:close()
+               end
+       end
 end
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock.lua
deleted file mode 100644 (file)
index d80cb48..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
--- Copyright 2016 Hannu Nyman
--- Licensed to the public under the Apache License 2.0.
-
-m = Map("adblock", translate("Adblock"),
-       translate("Configuration of the adblock package to block ad/abuse domains by using DNS."))
-
--- General options
-
-s = m:section(NamedSection, "global", "adblock", translate("Global options"))
-
-o1 = s:option(Flag, "adb_enabled", translate("Enable adblock"))
-o1.rmempty = false
-o1.default = 0
-
-o3 = s:option(Value, "adb_whitelist", translate("Whitelist file"),
-     translate("File with whitelisted hosts/domains that are allowed despite being on a blocklist."))
-o3.rmempty = false
-o3.datatype = "file"
-
--- Blocklist options
-
-bl = m:section(TypedSection, "source", translate("Blocklist sources"),
-       translate("Available blocklist sources (")
-       .. [[<a href="https://github.com/openwrt/packages/blob/master/net/adblock/files/README.md" target="_blank">]]
-       .. translate("see list details")
-       .. [[</a>]]
-       .. translate("). Note that list URLs and Shallalist category selections are not configurable via Luci."))
-bl.template = "cbi/tblsection"
-
-name = bl:option(Flag, "enabled", translate("Enabled"))
-name.rmempty  = false
-
-des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
-
--- Additional options
-
-s2 = m:section(NamedSection, "backup", "service", translate("Backup options"))
-
-o4 = s2:option(Flag, "enabled", translate("Enable blocklist backup"))
-o4.rmempty = false
-o4.default = 0
-
-o5 = s2:option(Value, "adb_dir", translate("Backup directory"))
-o5.rmempty = false
-o5.datatype = "directory"
-
--- Extra options
-
-e = m:section(NamedSection, "global", "adblock", translate("Extra options"),
-       translate("Options for further tweaking in case the defaults are not suitable for you."))
-
-a = e:option(Flag, "adb_debug", translate("Enable verbose debug logging"))
-a.default = a.disabled
-a.rmempty = false
-
-a = e:option(Value, "adb_iface", translate("Restrict reload trigger to certain interface(s)"),
-       translate("Space separated list of wan interfaces that trigger reload action. " ..
-               "To disable reload trigger set it to 'false'. Default: empty"))
-a.datatype = "network"
-a.rmempty = true
-
-return m
-
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/blacklist_tab.lua
new file mode 100644 (file)
index 0000000..ef70100
--- /dev/null
@@ -0,0 +1,52 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "blacklist", "adb_src" or "/etc/adblock/adblock.blacklist")
+
+if not nixio.fs.access(adbinput) then
+       m = SimpleForm("error", nil,
+               translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+if nixio.fs.stat(adbinput).size > 524288 then
+       m = SimpleForm("error", nil,
+               translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
+               .. translate("Please edit this file directly in a terminal session."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translatef("This form allows you to modify the content of the adblock blacklist (%s).<br />", adbinput)
+       .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
+
+f = s:option(TextValue, "data")
+f.datatype = "string"
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/configuration_tab.lua
new file mode 100644 (file)
index 0000000..1d89485
--- /dev/null
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local adbinput = "/etc/config/adblock"
+
+if not nixio.fs.access(adbinput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main adblock configuration file (/etc/config/adblock)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/overview_tab.lua
new file mode 100644 (file)
index 0000000..4bb404c
--- /dev/null
@@ -0,0 +1,242 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs       = require("nixio.fs")
+local uci      = require("luci.model.uci").cursor()
+local sys      = require("luci.sys")
+local util     = require("luci.util")
+local dump     = util.ubus("network.interface", "dump", {})
+local json     = require("luci.jsonc")
+local adbinput = uci.get("adblock", "global", "adb_rtfile") or "/tmp/adb_runtime.json"
+
+if not uci:get("adblock", "extra") then
+       m = SimpleForm("", nil, translate("Please update your adblock config file to use this package.<br />")
+       .. translatef("During opkg package installation use the '--force-maintainer' option to overwrite the pre-existing config file or download a fresh default config from "
+       .. "<a href=\"%s\" target=\"_blank\">"
+       .. "here</a>", "https://raw.githubusercontent.com/openwrt/packages/master/net/adblock/files/adblock.conf"))
+       m.submit = false
+       m.reset = false
+       return m
+end
+
+m = Map("adblock", translate("Adblock"),
+       translate("Configuration of the adblock package to block ad/abuse domains by using DNS. ")
+       .. translatef("For further information "
+       .. "<a href=\"%s\" target=\"_blank\">"
+       .. "check the 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")
+       luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+end
+
+-- Main adblock options
+
+s = m:section(NamedSection, "global", "adblock")
+
+local parse = json.parse(fs.readfile(adbinput) or "")
+if parse then
+       status  = parse.data.adblock_status
+       version = parse.data.adblock_version
+       domains = parse.data.overall_domains
+       fetch   = parse.data.fetch_utility
+       backend = parse.data.dns_backend
+       rundate = parse.data.last_rundate
+end
+
+o1 = s:option(Flag, "adb_enabled", translate("Enable Adblock"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+btn = s:option(Button, "", translate("Suspend / Resume Adblock"))
+if parse and status == "enabled" then
+       btn.inputtitle = translate("Suspend")
+       btn.inputstyle = "reset"
+       btn.disabled = false
+       function btn.write()
+               luci.sys.call("/etc/init.d/adblock suspend >/dev/null 2>&1")
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+       end
+elseif parse and status == "paused" then
+       btn.inputtitle = translate("Resume")
+       btn.inputstyle = "apply"
+       btn.disabled = false
+       function btn.write()
+               luci.sys.call("/etc/init.d/adblock resume >/dev/null 2>&1")
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "adblock"))
+       end
+else
+       btn.inputtitle = translate("-------")
+       btn.inputstyle = "button"
+       btn.disabled = true
+end
+
+o2 = s:option(ListValue, "adb_dns", translate("DNS Backend (DNS Directory)"),
+       translate("List of supported DNS backends with their default list export directory.<br />")
+       .. translate("To overwrite the default path use the 'DNS Directory' option in the extra section below."))
+o2:value("dnsmasq", "dnsmasq (/tmp/dnsmasq.d)")
+o2:value("unbound", "unbound (/var/lib/unbound)")
+o2:value("named", "named (/var/lib/bind)")
+o2:value("kresd", "kresd (/etc/kresd)")
+o2:value("dnscrypt-proxy","dnscrypt-proxy (/tmp)")
+o2.rmempty = false
+
+o3 = s:option(ListValue, "adb_trigger", translate("Startup Trigger"),
+       translate("List of available network interfaces. Usually the startup will be triggered by the 'wan' interface.<br />")
+       .. translate("Choose 'none' to disable automatic startups, 'timed' to use a classic timeout (default 30 sec.) or select another trigger interface."))
+o3:value("none")
+o3:value("timed")
+if dump then
+       local i, v
+       for i, v in ipairs(dump.interface) do
+               if v.interface ~= "loopback" then
+                       o3:value(v.interface)
+               end
+       end
+end
+o3.rmempty = false
+
+-- Runtime information
+
+ds = s:option(DummyValue, "", translate("Runtime Information"))
+ds.template = "cbi/nullsection"
+
+dv1 = s:option(DummyValue, "", translate("Adblock Status"))
+dv1.template = "adblock/runtime"
+if parse == nil then
+       dv1.value = translate("n/a")
+else
+       if status == "error" then
+               dv1.value = translate("error")
+       elseif status == "disabled" then
+               dv1.value = translate("disabled")
+       elseif status == "paused" then
+               dv1.value = translate("paused")
+       else
+               dv1.value = translate("enabled")
+       end
+end
+
+dv2 = s:option(DummyValue, "", translate("Adblock Version"))
+dv2.template = "adblock/runtime"
+if parse == nil then
+       dv2.value = translate("n/a")
+else
+       dv2.value = version
+end
+
+dv3 = s:option(DummyValue, "", 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 = translate("n/a")
+else
+       dv3.value = fetch
+end
+
+dv4 = s:option(DummyValue, "", translate("DNS Backend (DNS Directory)"))
+dv4.template = "adblock/runtime"
+if parse == nil then
+       dv4.value = translate("n/a")
+else
+       dv4.value = backend
+end
+
+dv5 = s:option(DummyValue, "", translate("Overall Domains"))
+dv5.template = "adblock/runtime"
+if parse == nil then
+       dv5.value = translate("n/a")
+else
+       dv5.value = domains
+end
+
+dv6 = s:option(DummyValue, "", translate("Last Run"))
+dv6.template = "adblock/runtime"
+if parse == nil then
+       dv6.value = translate("n/a")
+else
+       dv6.value = rundate
+end
+
+-- Blocklist table
+
+bl = m:section(TypedSection, "source", translate("Blocklist Sources"),
+       translate("Available blocklist sources. ")
+       .. translate("List URLs and Shallalist category selections are configurable in the 'Advanced' section.<br />")
+       .. translate("Caution: To prevent OOM exceptions on low memory devices with less than 64 MB free RAM, please do not select too many lists - 5-6 should be sufficient!"))
+bl.template = "cbi/tblsection"
+
+name = bl:option(Flag, "enabled", translate("Enabled"))
+name.rmempty = false
+
+ssl = bl:option(DummyValue, "adb_src", translate("SSL req."))
+function ssl.cfgvalue(self, section)
+       local source = self.map:get(section, "adb_src")
+       if source and source:match("https://") then
+               return translate("Yes")
+       else
+               return translate("No")
+       end
+end
+des = bl:option(DummyValue, "adb_src_desc", translate("Description"))
+
+-- Extra options
+
+e = m:section(NamedSection, "extra", "adblock", translate("Extra Options"),
+       translate("Options for further tweaking in case the defaults are not suitable for you."))
+
+e1 = e:option(Flag, "adb_debug", translate("Verbose Debug Logging"),
+       translate("Enable verbose debug logging in case of any processing error."))
+e1.default = e1.disabled
+e1.rmempty = false
+
+e2 = e:option(Flag, "adb_forcedns", translate("Force Local DNS"),
+       translate("Redirect all DNS queries from 'lan' zone to the local resolver."))
+e2.default = e2.disabled
+e2.rmempty = false
+
+e3 = e:option(Flag, "adb_forcesrt", translate("Force Overall Sort"),
+       translate("Enable memory intense overall sort / duplicate removal on low memory devices (&lt; 64 MB free RAM)"))
+e3.default = e3.disabled
+e3.rmempty = false
+
+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 backup mode."))
+e4.default = e4.disabled
+e4.rmempty = false
+
+e5 = e:option(Value, "adb_backupdir", translate("Backup Directory"),
+       translate("Target directory for adblock backups. Please use only non-volatile disks, e.g. an external usb stick."))
+e5:depends("adb_backup", 1)
+e5.datatype = "directory"
+e5.default = "/mnt"
+e5.rmempty = true
+
+e6 = e:option(Flag, "adb_backup_mode", translate("Backup Mode"),
+       translate("Do not automatically update blocklists during startup, use blocklist backups instead."))
+e6:depends("adb_backup", 1)
+e6.default = e6.disabled
+e6.rmempty = true
+
+e7 = e:option(Flag, "adb_whitelist_mode", translate("Whitelist Mode"),
+       translate("Block access to all domains except those explicitly listed in the whitelist file."))
+e7.default = e7.disabled
+e7.rmempty = true
+
+e8 = e:option(Value, "adb_dnsdir", translate("DNS Directory"),
+       translate("Target directory for the generated blocklist 'adb_list.overall'."))
+e8.datatype = "directory"
+e8.optional = true
+
+e9 = e:option(Value, "adb_whitelist", translate("Whitelist File"),
+       translate("Full path to the whitelist file."))
+e9.datatype = "file"
+e9.default = "/etc/adblock/adblock.whitelist"
+e9.optional = true
+
+e10 = e:option(Value, "adb_triggerdelay", translate("Trigger Delay"),
+       translate("Additional trigger delay in seconds before adblock processing begins."))
+e10.datatype = "range(1,60)"
+e10.optional = true
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua b/applications/luci-app-adblock/luasrc/model/cbi/adblock/whitelist_tab.lua
new file mode 100644 (file)
index 0000000..a3659eb
--- /dev/null
@@ -0,0 +1,51 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local uci = require("uci")
+local adbinput = uci.get("adblock", "global", "adb_whitelist") or "/etc/adblock/adblock.whitelist"
+
+if not nixio.fs.access(adbinput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+if nixio.fs.stat(adbinput).size > 524288 then
+       m = SimpleForm("error", nil,
+       translate("The file size is too large for online editing in LuCI (&gt; 512 KB). ")
+       .. translate("Please edit this file directly in a terminal session."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("adblock/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translatef("This form allows you to modify the content of the adblock whitelist (%s).<br />", adbinput)
+       .. translate("Please add only one domain per line. Comments introduced with '#' are allowed - ip addresses, wildcards and regex are not."))
+
+f = s:option(TextValue, "data")
+f.datatype = "string"
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(adbinput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(adbinput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm b/applications/luci-app-adblock/luasrc/view/adblock/config_css.htm
new file mode 100644 (file)
index 0000000..2233a15
--- /dev/null
@@ -0,0 +1,13 @@
+<style type="text/css">
+       textarea
+       {
+               border: 1px solid #cccccc;
+               padding: 5px;
+               font-size: 12px;
+               font-family: monospace;
+               resize: none;
+               white-space: pre;
+               overflow-wrap: normal;
+               overflow-x: scroll;
+       }
+</style>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/logread.htm b/applications/luci-app-adblock/luasrc/view/adblock/logread.htm
new file mode 100644 (file)
index 0000000..5e25a54
--- /dev/null
@@ -0,0 +1,14 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+       <fieldset class="cbi-section">
+               <div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for adblock related messages only.%></div>
+               <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+       </fieldset>
+</div>
+<%+footer%>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/query.htm b/applications/luci-app-adblock/luasrc/view/adblock/query.htm
new file mode 100644 (file)
index 0000000..ce706e4
--- /dev/null
@@ -0,0 +1,65 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">
+//<![CDATA[
+       var stxhr = new XHR();
+
+       function update_status(data)
+       {
+               var domain = data.value;
+               var input = document.getElementById('query_input');
+               var output = document.getElementById('query_output');
+
+               if (input && output)
+               {
+                       output.innerHTML =
+                               '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" /> ' +
+                               '<%:Waiting for command to complete...%>'
+                       ;
+                       input.parentNode.style.display = 'block';
+                       input.style.display = 'inline';
+                       stxhr.post('<%=luci.dispatcher.build_url('admin/services/adblock/advanced/result/')%>' + domain, { token: '<%=token%>' },
+                               function(x)
+                               {
+                                       if (x.responseText)
+                                       {
+                                               input.style.display = 'none';
+                                               output.innerHTML = String.format('<pre>%h</pre>', x.responseText);
+                                       }
+                                       else
+                                       {
+                                               input.style.display = 'none';
+                                               output.innerHTML = '<span class="error"><%:Invalid domain specified!%></span>';
+                                       }
+                               }
+                       );
+               }
+       }
+//]]>
+</script>
+
+<form method="post" action="<%=REQUEST_URI%>">
+       <div class="cbi-map">
+               <fieldset class="cbi-section">
+                       <div class="cbi-section-descr"><%:This form allows you to query active block lists for certain domains, e.g. for whitelisting.%></div>
+                       <div style="width:33%; float:left;">
+                               <input style="margin: 5px 0" type="text" value="www.lede-project.org" name="input" />
+                               <input type="button" value="<%:Query%>" class="cbi-button cbi-button-apply" onclick="update_status(this.form.input)" />
+                       </div>
+                       <br style="clear:both" />
+                       <br />
+               </fieldset>
+       </div>
+       <fieldset class="cbi-section" style="display:none">
+               <legend id="query_input"><%:Collecting data...%></legend>
+               <span id="query_output"></span>
+       </fieldset>
+</form>
+
+<%+footer%>
diff --git a/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm b/applications/luci-app-adblock/luasrc/view/adblock/runtime.htm
new file mode 100644 (file)
index 0000000..0221a75
--- /dev/null
@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border:none;box-shadow:none;background:transparent;color:#0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>
diff --git a/applications/luci-app-adblock/po/it/adblock.po b/applications/luci-app-adblock/po/it/adblock.po
new file mode 100644 (file)
index 0000000..af3414c
--- /dev/null
@@ -0,0 +1,396 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 17/09/2017\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language: it\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Registro Adblock"
+
+msgid "Adblock Status"
+msgstr "Status Adblock"
+
+msgid "Adblock Version"
+msgstr "Versione Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Tempo addizionale in secondi di attesa prima che adblock si avvii."
+
+msgid "Advanced"
+msgstr "Avanzato"
+
+msgid "Available blocklist sources."
+msgstr "Fonti lista di blocco disponibili."
+
+msgid "Backup Directory"
+msgstr "Directory del Backup"
+
+msgid "Backup Mode"
+msgstr ""
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
+msgstr "Fonti lista di Blocco"
+
+msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Scegli 'none' per disabilitare l'avvio automatico, 'timed' per usare un "
+"classico timeout (default 30 sec.) o seleziona un'altra interfaccia di avvio."
+
+msgid "Collecting data..."
+msgstr "Raccogliendo dati..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+msgstr ""
+"Configurazione del pacchetto adblock per bloccare domini pubblicità/abuso "
+"usando i DNS."
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr "Directory DNS"
+
+msgid "Description"
+msgstr "Descrizione"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Non aggiornare automaticamente le liste durante l'avvio, usa invece i backup "
+"della lista di blocco."
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Modifica Lista Nera"
+
+msgid "Edit Configuration"
+msgstr "Modifica Configurazione"
+
+msgid "Edit Whitelist"
+msgstr "Modifica Lista Bianca"
+
+msgid "Enable Adblock"
+msgstr "Attiva Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Attiva Backup Lista di Blocco"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"Abilita il registro dettagliato in caso di qualsiasi errore di processo."
+
+msgid "Enabled"
+msgstr "Abilitato"
+
+msgid "Extra Options"
+msgstr "Opzioni Extra"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Per le fonti delle liste protette da SSL hai bisogno di una libreria SSL "
+"adatta, p.e. 'libustream-ssl' o wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr "Forza DNS Locale"
+
+msgid "Force Overall Sort"
+msgstr "Forza Ordinamento Globale"
+
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr "File di input non trovato, per favore controlla la tua configurazione."
+
+msgid "Invalid domain specified!"
+msgstr "Dominio invalido specificato!"
+
+msgid "Last Run"
+msgstr "Ultimo Avvio"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"Le selezioni degli URL delle liste e categorie Shallalist sono configurabili "
+"nella sezione 'Avanzato'.<br />"
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"Lista dei backend DNS supportati con la loro directory di default di esporto "
+"della lista.<br />"
+
+msgid "Loading"
+msgstr "Caricando"
+
+msgid "No"
+msgstr "No"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Opzioni per ulteriori modifiche in caso che quelle di default non ti sono "
+"adatte."
+
+msgid "Overall Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "Riassunto"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"Per favore aggiungi solo un dominio per linea. I commenti introdotti con '#' "
+"sono consentiti - indirizzi ip , jolly e regex non lo sono."
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+"Per favore modifica questo file direttamente in una sessione al terminale."
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+
+msgid "Query"
+msgstr "Interrogazione"
+
+msgid "Query domains"
+msgstr "Interrogazione domini"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"Reindirizza tutte le richieste DNS dalla zona 'lan' al risolvitore locale."
+
+msgid "Resume"
+msgstr "Riprendi"
+
+msgid "Runtime Information"
+msgstr "Informazione di Runtime"
+
+msgid "SSL req."
+msgstr "Ric. SSL"
+
+msgid "Save"
+msgstr "Salva"
+
+msgid "Startup Trigger"
+msgstr "Innesco d'Avvio"
+
+msgid "Suspend"
+msgstr "Sospendi"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Sospendi / Riprendi Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "Directory per la lista di blocco generata 'adb_list.overall'."
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"La grandezza del file è troppo grande per modificarla online in LuCI (&gt; "
+"512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista nera di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Questo form ti consente di modificare il contenuto della lista bianca di "
+"adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Questo form ti consente di modificare il contenuto del file principale di "
+"configurazione di adblock (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Questo form ti consente di interrogare le liste di blocco attive per "
+"determinati domini, p.e. per metterli nella lista bianca."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Questo form mostra l'output del registro, prefiltrato per messaggi relativi "
+"solo ad adblock."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"Per sovrascrivere il percorso di default usa l'opzione 'Directory DNS' nella "
+"sezione aggiuntiva sotto."
+
+msgid "Trigger Delay"
+msgstr "Ritardo Innesco"
+
+msgid "Verbose Debug Logging"
+msgstr "Registro di Debug Dettagliato"
+
+msgid "View Logfile"
+msgstr "Vedi Registro"
+
+msgid "Waiting for command to complete..."
+msgstr "Aspettando che il comando venga completato..."
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr "Sì"
+
+msgid "disabled"
+msgstr "disabilitato"
+
+msgid "enabled"
+msgstr "abilitato"
+
+msgid "error"
+msgstr "errore"
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr "in pausa"
+
+#~ msgid ""
+#~ "Caution: Please don't select big lists or many lists at once on low "
+#~ "memory devices to prevent OOM exceptions!"
+#~ msgstr ""
+#~ "Attenzione: Per favore non selezionare grandi liste o molte liste alla "
+#~ "volta su dispositivi con poca memoria per prevenire errori OOM!"
+
+#~ msgid ""
+#~ "Create compressed blocklist backups, they will be used in case of "
+#~ "download errors or during startup in manual mode."
+#~ msgstr ""
+#~ "Crea i backup compressi delle liste di blocco, saranno usati in caso di "
+#~ "errori di download o durante l'avvio in modalità manuale."
+
+#~ msgid ""
+#~ "Enable memory intense overall sort / duplicate removal on low memory "
+#~ "devices (&lt; 64 MB RAM)"
+#~ msgstr ""
+#~ "Attiva l'ordinamento globale / rimozione duplicati stressante per la "
+#~ "memoria su dispositivi con poca memoria (&lt; 64 MB RAM)"
+
+#~ msgid ""
+#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
+#~ "documentation</a>"
+#~ msgstr ""
+#~ "Per ulteriori informazioni <a href=\"%s\" target=\"_blank\">vedi "
+#~ "documentazione online</a>"
+
+#~ msgid ""
+#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+#~ "config file or download a fresh default config from <a href=\"%s\" target="
+#~ "\"_blank\">here</a>"
+#~ msgstr ""
+#~ "In OPKG usa l'opzione '--force-maintainer' per sovrascrivere il pre-"
+#~ "esistente file di configurazione o scarica una nuova configurazione di "
+#~ "default da <a href=\"%s\" target=\"_blank\">qui</a>"
+
+#~ msgid ""
+#~ "List of available network interfaces. By default the startup will be "
+#~ "triggered by the 'wan' interface.<br />"
+#~ msgstr ""
+#~ "Lista delle interfacce di rete disponibili. Per default l'avvio sarà "
+#~ "innescato dall'interfaccia 'wan'.<br />"
+
+#~ msgid "Manual / Backup mode"
+#~ msgstr "Modalità Manuale / Backup"
+
+#~ msgid "Overall Blocked Domains"
+#~ msgstr "Totale Domini Bloccati"
+
+#~ msgid "Please update your adblock config file to use this package."
+#~ msgstr ""
+#~ "Per favore aggiorna il tuo file configurazione di adblock per usare "
+#~ "questo pacchetto."
+
+#~ msgid ""
+#~ "Target directory for adblock backups. Please use only non-volatile disks, "
+#~ "no ram/tmpfs drives."
+#~ msgstr ""
+#~ "Directory per i backup di adblock. Per favore usa solo dischi non "
+#~ "volatili, non dischi ram/tmpfs."
index a3c982f..becef99 100644 (file)
@@ -8,132 +8,346 @@ msgstr ""
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\n"
+"X-Generator: Poedit 2.0.4\n"
 "Language: ja\n"
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
-msgstr ""
-")。これらのリストのURLおよびshallaリストのカテゴリー選択は、Luciによって設定"
-"できないことに注意します。"
+msgid "-------"
+msgstr "(利用不可)"
 
 msgid "Adblock"
 msgstr "Adblock"
 
-msgid "Available blocklist sources ("
-msgstr "利用可能なブロックリスト提供元です("
+msgid "Adblock Logfile"
+msgstr "Adblock ログファイル"
+
+msgid "Adblock Status"
+msgstr "Adblock ステータス"
+
+msgid "Adblock Version"
+msgstr "Adblock バージョン"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "Adblock の処理が開始されるまでの、追加の遅延時間(秒)です。"
+
+msgid "Advanced"
+msgstr "詳細設定"
 
-msgid "Backup directory"
-msgstr "バックアップ ディレクトリ"
+msgid "Available blocklist sources."
+msgstr "利用可能なブロックリスト提供元です。"
 
-msgid "Backup options"
-msgstr "バックアップ オプション"
+msgid "Backup Directory"
+msgstr "バックアップ先 ディレクトリ"
 
-msgid "Blocklist sources"
+msgid "Backup Mode"
+msgstr "バックアップ モード"
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+"ホワイトリストに列記されていない全ドメインへのアクセスをブロックします。"
+
+msgid "Blocklist Sources"
 msgstr "ブロックリスト提供元"
 
 msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+"警告: RAM の空き容量が 64MB に満たないメモリー容量の小さいデバイスでは、 "
+"OutOfMemory (OOM) 例外を防ぐために、多くのリストを選択しないようにしてくださ"
+"い。5 - 6個のリストで十分です。"
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"自動スタートアップを無効にするには 'none' を、従来のタイムアウト(既定値: 30"
+"秒)を使用するには 'timed' を選択してください。または、他のトリガとなるイン"
+"ターフェースを選択してください。"
+
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
+msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
-"広告/不正ドメインをDNSを利用してブロックする、adblock パッケージの設定です。"
+"DNS の利用によって広告/不正ドメインをブロックする、Adblock パッケージの設定で"
+"す。"
+
+msgid ""
+"Create compressed blocklist backups, they will be used in case of download "
+"errors or during startup in backup mode."
+msgstr ""
+"圧縮されたブロックリストのバックアップを作成します。これは、リストのダウン"
+"ロードがエラーの場合、またはバックアップ モードでサービスを起動した場合に使用"
+"されます。"
+
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS バックエンド(DNS ディレクトリ)"
+
+msgid "DNS Directory"
+msgstr "DNS ディレクトリ"
 
 msgid "Description"
 msgstr "説明"
 
-msgid "Enable adblock"
-msgstr "adblockの有効化"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"サービス起動時にブロックリストを自動的に更新せず、代わりにバックアップされた"
+"ブロックリストを使用します。"
 
-msgid "Enable blocklist backup"
+msgid "Download Utility (SSL Library)"
+msgstr "ダウンロード ユーティリティ(SSL ライブラリ)"
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+"opkg でパッケージをインストールする際に '--force-maintainer' オプションを使用"
+"して既存の設定ファイルを上書きするか、 <a href=\"%s\" target=\"_blank\">ここ"
+"</a> からデフォルトの設定ファイルをダウンロードしてください。"
+
+msgid "Edit Blacklist"
+msgstr "ブラックリストの編集"
+
+msgid "Edit Configuration"
+msgstr "設定の編集"
+
+msgid "Edit Whitelist"
+msgstr "ホワイトリストの編集"
+
+msgid "Enable Adblock"
+msgstr "Adblock の有効化"
+
+msgid "Enable Blocklist Backup"
 msgstr "ブロックリスト バックアップの有効化"
 
-msgid "Enable verbose debug logging"
-msgstr "詳細なデバッグ ログの有効化"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+"メモリー容量の少ないデバイス(RAM 空き領域 64MB 未満)において、一時ファイル"
+"内の全体的なソート及び重複の除去を有効にします。"
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+"何らかの処理エラーが発生した場合に、詳細なデバッグ ログを有効にします。"
 
 msgid "Enabled"
 msgstr "有効"
 
-msgid "Extra options"
-msgstr "拡張設定"
+msgid "Extra Options"
+msgstr "拡張オプション"
 
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
 msgstr ""
-"ã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83\9bã\83¯ã\82¤ã\83\88ã\83ªã\82¹ã\83\88 ã\83\9bã\82¹ã\83\88\83\89ã\83¡ã\82¤ã\83³ã\81¯ã\80\81ã\83\96ã\83­ã\83\83ã\82¯ã\83ªã\82¹ã\83\88ã\81«ç\99»é\8c²ã\81\95ã\82\8cã\81¦ã\81\84ã\81¦ã\82\82"
-"許可されます。"
+"SSLã\81§ä¿\9dè­·ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8bã\83\96ã\83­ã\83\83ã\82¯ã\83ªã\82¹ã\83\88ã\81®å\8f\96å¾\97ã\81«ã\81¯ã\80\81é\81©å\88\87ã\81ªSSL ã\83©ã\82¤ã\83\96ã\83©ã\83ªã\81\8cå¿\85è¦\81ã\81§ã\81\99ã\80\82"
+"例: 'libustream-ssl' または wget 'built-in'"
 
-msgid "Global options"
-msgstr "一般設定"
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a> を"
+"確認してください。"
+
+msgid "Force Local DNS"
+msgstr "ローカル DNS の強制"
+
+msgid "Force Overall Sort"
+msgstr "全体ソートの強制"
+
+msgid "Full path to the whitelist file."
+msgstr "ホワイトリスト ファイルへのフルパスです。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Invalid domain specified!"
+msgstr "無効なドメインが指定されています!"
+
+msgid "Last Run"
+msgstr "最終実行"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+"リストの URL 及び \"Shalla\" リストのカテゴリー設定は、'詳細設定' セクション"
+"で設定することができます。<br />"
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+"利用可能なネットワーク インターフェースの一覧です。通常、 'wan' インター"
+"フェースによりスタートアップがトリガされます。<br />"
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+"サポートされる DNS バックエンドと、それぞれのデフォルトのリスト出力先ディレク"
+"トリのリストです<br />"
+
+msgid "Loading"
+msgstr "読込中"
+
+msgid "No"
+msgstr "いいえ"
 
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr "デフォルト設定が適切でない場合、追加で設定するためのオプションです。"
 
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "リロードトリガを特定のインターフェースに限定する"
+msgid "Overall Domains"
+msgstr "全体のドメイン"
+
+msgid "Overview"
+msgstr "概要"
 
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
 msgstr ""
-"リロード実行のトリガとなる、スペースで区切られたWANインターフェースのリストで"
-"す。リロードトリガを無効にするには、 false を設定します。デフォルト:(空)"
+"1行に1つのドメインを追加してください。'#' から始まるコメントを記述できます"
+"が、IP アドレスやワイルドカード、正規表現を設定値として使用することはできませ"
+"ん。"
 
-msgid "Whitelist file"
-msgstr "ホワイトリスト ファイル"
+msgid "Please edit this file directly in a terminal session."
+msgstr "ターミナル セッションで直接このファイルを編集してください。"
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+"このパッケージを使用するには、既存の Adblock 設定ファイルを更新してください。"
+"<br />"
+
+msgid "Query"
+msgstr "検索"
+
+msgid "Query domains"
+msgstr "ドメインの検索"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+"'lan' ゾーンからの全 DNS クエリを、ローカル リゾルバにリダイレクトします。"
+
+msgid "Resume"
+msgstr "再開"
+
+msgid "Runtime Information"
+msgstr "実行情報"
+
+msgid "SSL req."
+msgstr "SSL 必須"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
+
+msgid "Suspend"
+msgstr "一時停止"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Adblock の一時停止 / 再開"
 
-msgid "see list details"
-msgstr "リストの詳細を見る"
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+"Adblock バックアップの保存先ディレクトリです。 外部 USB フラッシュメモリなど"
+"の不揮発性ドライブのみを使用してください。"
 
-#~ msgid "Count"
-#~ msgstr "カウント"
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "生成されたブロックリスト 'adb_list.overall' の保存先ディレクトリです。"
 
-#~ msgid "Do not write status info to flash"
-#~ msgstr "ステータス情報をフラッシュに書き込まない"
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"ファイル サイズが大きすぎる(512 KB超)ため、 LuCI 上でオンライン編集できませ"
+"ん。"
 
-#~ msgid "Last update of the blocklists"
-#~ msgstr "ブロックリストの最終更新日時"
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"このフォームでは、Adblock ブラックリスト (%s) の内容を変更することができま"
+"す。<br />"
 
-#~ msgid "List date/state"
-#~ msgstr "リスト日時/状態"
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"このフォームでは、Adblock ホワイトリスト (%s) の内容を変更することができま"
+"す。<br />"
 
-#~ msgid "Name of the logical lan interface"
-#~ msgstr "論理LANインターフェース名"
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"このフォームでは、メインのAdblock 設定ファイル (/etc/config/adblock) の内容を"
+"変更することができます。"
 
-#~ msgid "Percentage of blocked packets (before last update, IPv4/IPv6)"
-#~ msgstr "ブロック済みパケットの割合(最終更新以前、IPv4/IPv6)"
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"このフォームでは、現在有効なリスト内で特定のドメインを検索することができま"
+"す。例: ホワイトリスト内"
 
-#~ msgid "Port of the adblock uhttpd instance"
-#~ msgstr "adblock uhttpdインスタンスのポート"
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"このフォームには、システムログ内の Adblock に関連するメッセージのみが表示され"
+"ます。"
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+"デフォルトのパスを上書きするには、下記拡張セクションの 'DNS ディレクトリ' オ"
+"プションを使用します。"
+
+msgid "Trigger Delay"
+msgstr "トリガ遅延"
 
-#~ msgid "Port of the adblock uhttpd instance for https links"
-#~ msgstr "httpsリンク用adblock uhttpdインスタンスのポート"
+msgid "Verbose Debug Logging"
+msgstr "詳細なデバッグ ログ"
 
-#~ msgid "Redirect all DNS queries to the local resolver"
-#~ msgstr "全てのDNSクエリをローカルリゾルバにリダイレクト"
+msgid "View Logfile"
+msgstr "ログファイルを見る"
 
-#~ msgid ""
-#~ "Skip writing update status information to the config file. Status fields "
-#~ "on this page will not be updated."
-#~ msgstr ""
-#~ "更新ステータス情報をコンフィグファイルに書き込まず、スキップします。この"
-#~ "ページのステータス画面は更新されなくなります。"
+msgid "Waiting for command to complete..."
+msgstr "コマンド実行中です..."
 
-#~ msgid "Statistics"
-#~ msgstr "ステータス"
+msgid "Whitelist File"
+msgstr "ホワイトリスト ファイル"
+
+msgid "Whitelist Mode"
+msgstr "ホワイトリスト モード"
+
+msgid "Yes"
+msgstr "はい"
+
+msgid "disabled"
+msgstr "無効"
+
+msgid "enabled"
+msgstr "有効"
 
-#~ msgid "Timeout for blocklist fetch (seconds)"
-#~ msgstr "ブロックリスト取得の制限時間(秒)"
+msgid "error"
+msgstr "エラー"
 
-#~ msgid "Total count of blocked domains"
-#~ msgstr "ブロック済みドメインの合計"
+msgid "n/a"
+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サーバーへのクエリを許可する場合、この設"
-#~ "定を無効にすることもできます。"
+msgid "paused"
+msgstr "一時停止"
diff --git a/applications/luci-app-adblock/po/pt-br/adblock.po b/applications/luci-app-adblock/po/pt-br/adblock.po
new file mode 100644 (file)
index 0000000..f51791f
--- /dev/null
@@ -0,0 +1,427 @@
+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: Luís Gabriel Lima Silva <gabrielima.si@gmail.com>\n"
+"Plural-Forms: nplurals=2; plural=(n > 1);\n"
+"Language: pt_BR\n"
+
+msgid "-------"
+msgstr ""
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Arquivo de log do Adblock"
+
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
+msgstr "Versão do Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+"Atraso de gatilho adicional em segundos antes do processamento do adblock "
+"começar."
+
+msgid "Advanced"
+msgstr "Avançado"
+
+msgid "Available blocklist sources."
+msgstr "Fontes de listas de bloqueio disponíveis."
+
+msgid "Backup Directory"
+msgstr "Diretório da cópia de segurança"
+
+msgid "Backup Mode"
+msgstr ""
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
+msgstr "Fontes de listas de bloqueio"
+
+msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+
+msgid "Collecting data..."
+msgstr "Coletando dados..."
+
+msgid ""
+"Configuration of the adblock package to block ad/abuse domains by using DNS."
+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 backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
+
+msgid "Description"
+msgstr "Descrição"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Não atualize as listas de bloqueio automaticamente durante o início, use o "
+"backup das listas como alternativa."
+
+msgid "Download Utility (SSL Library)"
+msgstr "Utilitário de Download (Biblioteca SSL)"
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Editar Lista de Bloqueio"
+
+msgid "Edit Configuration"
+msgstr "Editar Configuração"
+
+msgid "Edit Whitelist"
+msgstr "Editar Lista Permitida"
+
+msgid "Enable Adblock"
+msgstr "Habilitar adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "Habilitar cópia de segurança da lista de bloqueio"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr ""
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid "Extra Options"
+msgstr "Opções adicionais"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"Para uma lista de bloqueio protegida por SSL você precisa de uma biblioteca "
+"SSL adequada, e.x. 'libustream-ssl' ou o wget 'built-in'."
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr "Force o DNS local"
+
+msgid "Force Overall Sort"
+msgstr "Force Tipo Geral"
+
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr "Arquivo de entrada não encontrado, por favor cheque sua configuração."
+
+msgid "Invalid domain specified!"
+msgstr "Domínio especificado inválido!"
+
+msgid "Last Run"
+msgstr ""
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr "Carregando"
+
+msgid "No"
+msgstr "Não"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+"Opções para aprimoramentos adicionais caso as opções padrão não sejam "
+"suficientes para você."
+
+msgid "Overall Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "Visão geral"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "Por favor edite esse arquivo direto em uma sessão de terminal."
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+
+msgid "Query"
+msgstr "Consulta"
+
+msgid "Query domains"
+msgstr "Consulta de domínios"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Runtime Information"
+msgstr "Informação de execução"
+
+msgid "SSL req."
+msgstr "req. de SSL"
+
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
+msgstr "Suspender / Resumir adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr ""
+"O tamanho do arquivo é muito grande para edição online no LuCI (&gt; 512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de bloqueio "
+"do adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das listas de "
+"permissão do adblock (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+"Esse formulário permite que você modifique o conteúdo das do arquivo de "
+"configuração principal (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+"Esse formulário permite que você consulte listas de blocos ativos para "
+"certos domínios, e.x. para listas de permissão."
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+"Esse formulário mostra a saída do syslog, pré-filtrado para mensagens do "
+"adblock  apenas."
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr "Atraso no gatilho"
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr "Ver arquivo de log"
+
+msgid "Waiting for command to complete..."
+msgstr "Aguardando por comando para completar..."
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr "Sim"
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
+msgstr ""
+
+msgid "n/a"
+msgstr "n/d"
+
+msgid "paused"
+msgstr ""
+
+#~ msgid ""
+#~ "Create compressed blocklist backups, they will be used in case of "
+#~ "download errors or during startup in manual mode."
+#~ msgstr ""
+#~ "Crie backups comprimidos das listas de bloqueio, eles serão usados em "
+#~ "caso de erro dedownload ou durante o início em modo manual."
+
+#~ msgid ""
+#~ "Enable memory intense overall sort / duplicate removal on low memory "
+#~ "devices (&lt; 64 MB RAM)"
+#~ msgstr ""
+#~ "Ativar tipo geral intenso de memória / duplicar remoção em dispositivos "
+#~ "com pouca memória (&lt; 64 MB RAM)"
+
+#~ msgid ""
+#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
+#~ "documentation</a>"
+#~ msgstr ""
+#~ "Para outras informações <a href=\"%s\" target=\"_blank\">veja a "
+#~ "documentação online</a>"
+
+#~ msgid "Manual / Backup mode"
+#~ msgstr "Manual / Modo backup"
+
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Domínios bloqueados (total)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Porta dos fundos de DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Habilite registros detalhados para depuração"
+
+#~ msgid "Last rundate"
+#~ msgstr "Última data de execução"
+
+#~ msgid ""
+#~ "Note that list URLs and Shallalist category selections are configurable "
+#~ "in the 'Advanced' section."
+#~ msgstr ""
+#~ "Observe que as URLs da lista e as seleções da categoria Shallalist são "
+#~ "configuráveis na secção 'Avançada'."
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Redirecione todas as consultas de DNS para o resolvedor local."
+
+#~ msgid "Restrict interface trigger to certain interface(s)"
+#~ msgstr "Restingir o gatilho de interface para certas interface(s)"
+
+#~ msgid "Resume adblock"
+#~ msgstr "Resumir adblock"
+
+#~ msgid "Status"
+#~ msgstr "Estado"
+
+#~ msgid "active"
+#~ msgstr "ativo"
+
+#~ msgid "no domains blocked"
+#~ msgstr "nenhum domínio bloqueado"
+
+#~ msgid "suspended"
+#~ msgstr "suspenso"
+
+#~ msgid "Backup options"
+#~ msgstr "Opções da cópia de segurança"
+
+#~ msgid ""
+#~ "). Note that list URLs and Shallalist category selections are not "
+#~ "configurable via Luci."
+#~ msgstr ""
+#~ "). Note que a lista de URL e as seleções de categoria da Shallalist não "
+#~ "são configuráveis pelo Luci."
+
+#~ msgid "Available blocklist sources ("
+#~ msgstr "Fontes de listas de bloqueio disponíveis ("
+
+#~ msgid ""
+#~ "File with whitelisted hosts/domains that are allowed despite being on a "
+#~ "blocklist."
+#~ msgstr ""
+#~ "Arquivo com a lista branca dos equipamentos/domínios que serão "
+#~ "autorizados mesmo estando na lista de bloqueio."
+
+#~ msgid "Global options"
+#~ msgstr "Opções Globais"
+
+#~ msgid "Restrict reload trigger to certain interface(s)"
+#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
+
+#~ msgid ""
+#~ "Space separated list of wan interfaces that trigger reload action. To "
+#~ "disable reload trigger set it to 'false'. Default: empty"
+#~ msgstr ""
+#~ "Lista das interfaces WAN, separadas por espaço, que podem disparar uma "
+#~ "ação de recarga. Para desabilitar este gatilho, defina-o como 'false'. "
+#~ "Padrão: em branco"
+
+#~ msgid "Whitelist file"
+#~ msgstr "Arquivo da lista branca"
+
+#~ msgid "see list details"
+#~ msgstr "veja os detalhes da lista"
index 22a30e9..503c5f6 100644 (file)
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8\n"
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
-msgstr ""
+msgid "-------"
+msgstr "-------"
 
 msgid "Adblock"
-msgstr "Blockering av annonser"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Adblock's loggfil"
 
-msgid "Available blocklist sources ("
-msgstr "Tillgängliga källor för blockeringslistor ("
+msgid "Adblock Status"
+msgstr "Status för Adblock"
 
-msgid "Backup directory"
+msgid "Adblock Version"
+msgstr "Version av Adblock"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+
+msgid "Advanced"
+msgstr "Avancerat"
+
+msgid "Available blocklist sources."
+msgstr "Tillgängliga källor för blockeringslistor"
+
+msgid "Backup Directory"
 msgstr "Säkerhetskopiera mapp"
 
-msgid "Backup options"
-msgstr "Alternativ för säkerhetskopiering"
+msgid "Backup Mode"
+msgstr ""
 
-msgid "Blocklist sources"
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
 msgstr "Källor för blockeringslistor"
 
 msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"Välj 'inga' för att stänga av automatiska uppstarter, 'tidsinställd för att "
+"använda ett klassiskt avbrott (30 sek. är standard) eller välj ett annat "
+"utlösande gränssnitt."
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid ""
 "Configuration of the adblock package to block ad/abuse domains by using DNS."
 msgstr ""
-"Konfiguration av paket adblock för att blockera annons/otillåtna domäner "
-"genom att användning DNS."
+"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 backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS-bakände (DNS-mapp)"
+
+msgid "DNS Directory"
+msgstr "DNS-mapp"
 
 msgid "Description"
 msgstr "Beskrivning"
 
-msgid "Enable adblock"
-msgstr "Aktivera abblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+"Uppdatera inte automatiskt blockeringlistor vid uppstarten, använd "
+"säkerhetskopierade blockeringslistor istället."
+
+msgid "Download Utility (SSL Library)"
+msgstr "Nerladdningsprogram (SSL-bibliotek)"
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "Redigera svartlista"
+
+msgid "Edit Configuration"
+msgstr "Redigerar konfigurationen"
+
+msgid "Edit Whitelist"
+msgstr "Redigera vitlista"
+
+msgid "Enable Adblock"
+msgstr "Aktivera adblock"
 
-msgid "Enable blocklist backup"
+msgid "Enable Blocklist Backup"
 msgstr "Aktivera säkerhetskopiering av blockeringslistan"
 
-msgid "Enable verbose debug logging"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
 msgstr ""
 
 msgid "Enabled"
 msgstr "Aktiverad"
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr "Extra alternativ"
 
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr "Tvinga lokal DNS"
+
+msgid "Force Overall Sort"
 msgstr ""
 
-msgid "Global options"
-msgstr "Globala alternativ"
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+"Inmatningsfilen kunde inte hittas, var vänlig kontrollera din konfiguration."
+
+msgid "Invalid domain specified!"
+msgstr "Ogiltig domän angiven!"
+
+msgid "Last Run"
+msgstr "Kördes senast"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
+msgstr "Laddar"
+
+msgid "No"
+msgstr "Nej"
 
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr ""
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "Översikt"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "Vänligen redigera den här filen direkt i en terminal-session."
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+
+msgid "Query"
+msgstr "Fråga"
+
+msgid "Query domains"
+msgstr "Fråga efter domäner"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr "Återuppta"
+
+msgid "Runtime Information"
+msgstr "Information om körtid"
+
+msgid "SSL req."
+msgstr "SSL-rek."
+
+msgid "Save"
+msgstr "Spara"
+
+msgid "Startup Trigger"
+msgstr "Uppstartslösare"
+
+msgid "Suspend"
+msgstr "Stäng av"
+
+msgid "Suspend / Resume Adblock"
+msgstr "Upphäv / Återuppta adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr "Filstorleken är för stor för online-redigering i LuCi (&gt; 512 KB)."
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"svartlista (%s).<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
 msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's vitlista "
+"(%s).<br />"
 
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
 msgstr ""
+"Det här formuläret tillåter dig att förändra innehållet i adblock's "
+"huvudsakliga konfigurations fil (/etc/config/adblock)."
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr "Visa loggfil"
+
+msgid "Waiting for command to complete..."
+msgstr "Väntar på att kommandot ska slutföras..."
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr "Ja"
+
+msgid "disabled"
+msgstr "inaktiverad"
+
+msgid "enabled"
+msgstr "aktiverad"
+
+msgid "error"
+msgstr "fel"
+
+msgid "n/a"
+msgstr "n/a"
+
+msgid "paused"
+msgstr "pausad"
+
+#~ msgid ""
+#~ "Caution: Please don't select big lists or many lists at once on low "
+#~ "memory devices to prevent OOM exceptions!"
+#~ msgstr ""
+#~ "Försiktig: Vänligen välj inte stora listor eller många listor på samma "
+#~ "gång för enheter med lite minne för att undvika OOM-undantag!"
+
+#~ msgid ""
+#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
+#~ "documentation</a>"
+#~ msgstr ""
+#~ "För mer information <a href=\"%s\" target=\"_blank\">se dokumentationen "
+#~ "på internet</a>"
+
+#~ msgid "Manual / Backup mode"
+#~ msgstr "Manuell / Säkerhetskopieringsläge"
+
+#~ msgid "Please update your adblock config file to use this package."
+#~ msgstr ""
+#~ "Vänligen uppdatera din adblock's konfigurationsfil till att använda det "
+#~ "här paketet."
+
+#~ msgid "Blocked domains (overall)"
+#~ msgstr "Blockerade domäner (övergripande)"
+
+#~ msgid "DNS backend"
+#~ msgstr "Bakände för DNS"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "Aktivera utförlig loggning för avlusning"
+
+#~ msgid "Last rundate"
+#~ msgstr "Senaste kördatum"
+
+#~ msgid "Redirect all DNS queries to the local resolver."
+#~ msgstr "Dirigera om alla DNS-förfrågningar till den lokala "
+
+#~ msgid "Resume adblock"
+#~ msgstr "Återuppta adblock"
+
+#~ msgid "Status"
+#~ msgstr "Status"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "Upphäv adblock"
+
+#~ msgid "active"
+#~ msgstr "aktiv"
+
+#~ msgid "no domains blocked"
+#~ msgstr "inga domäner blockerades"
+
+#~ msgid "suspended"
+#~ msgstr "upphävd"
+
+#~ msgid "."
+#~ msgstr "."
+
+#~ msgid "For further information"
+#~ msgstr "För mer information"
+
+#~ msgid "Backup options"
+#~ msgstr "Alternativ för säkerhetskopiering"
+
+#~ msgid "Available blocklist sources ("
+#~ msgstr "Tillgängliga källor för blockeringslistor ("
+
+#~ msgid "Global options"
+#~ msgstr "Globala alternativ"
 
-msgid "Whitelist file"
-msgstr "Vitlista fil"
+#~ msgid "Whitelist file"
+#~ msgstr "Vitlista fil"
 
-msgid "see list details"
-msgstr "se listans detaljer"
+#~ msgid "see list details"
+#~ msgstr "se listans detaljer"
 
 #~ msgid "Count"
 #~ msgstr "Räkna"
index 6b2dbd1..9698333 100644 (file)
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
+msgid "-------"
 msgstr ""
 
 msgid "Adblock"
 msgstr ""
 
-msgid "Available blocklist sources ("
+msgid "Adblock Logfile"
+msgstr ""
+
+msgid "Adblock Status"
+msgstr ""
+
+msgid "Adblock Version"
+msgstr ""
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Available blocklist sources."
+msgstr ""
+
+msgid "Backup Directory"
+msgstr ""
+
+msgid "Backup Mode"
+msgstr ""
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
 msgstr ""
 
-msgid "Backup directory"
+msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
 msgstr ""
 
-msgid "Backup options"
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
 msgstr ""
 
-msgid "Blocklist sources"
+msgid "Collecting data..."
 msgstr ""
 
 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 backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr ""
+
+msgid "DNS Directory"
+msgstr ""
+
 msgid "Description"
 msgstr ""
 
-msgid "Enable adblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr ""
+
+msgid "Download Utility (SSL Library)"
+msgstr ""
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr ""
+
+msgid "Edit Configuration"
+msgstr ""
+
+msgid "Edit Whitelist"
+msgstr ""
+
+msgid "Enable Adblock"
+msgstr ""
+
+msgid "Enable Blocklist Backup"
 msgstr ""
 
-msgid "Enable blocklist backup"
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
 msgstr ""
 
-msgid "Enable verbose debug logging"
+msgid "Enable verbose debug logging in case of any processing error."
 msgstr ""
 
 msgid "Enabled"
 msgstr ""
 
-msgid "Extra options"
+msgid "Extra Options"
+msgstr ""
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr ""
+
+msgid "Force Overall Sort"
+msgstr ""
+
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Invalid domain specified!"
+msgstr ""
+
+msgid "Last Run"
 msgstr ""
 
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr ""
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr ""
+
+msgid "Loading"
 msgstr ""
 
-msgid "Global options"
+msgid "No"
 msgstr ""
 
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
 msgstr ""
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+
+msgid "Please edit this file directly in a terminal session."
+msgstr ""
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+
+msgid "Query"
+msgstr ""
+
+msgid "Query domains"
+msgstr ""
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr ""
+
+msgid "Resume"
+msgstr ""
+
+msgid "Runtime Information"
+msgstr ""
+
+msgid "SSL req."
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "Suspend"
+msgstr ""
+
+msgid "Suspend / Resume Adblock"
+msgstr ""
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr ""
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
 msgstr ""
 
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr ""
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr ""
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr ""
+
+msgid "Trigger Delay"
+msgstr ""
+
+msgid "Verbose Debug Logging"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "Waiting for command to complete..."
+msgstr ""
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "disabled"
+msgstr ""
+
+msgid "enabled"
+msgstr ""
+
+msgid "error"
 msgstr ""
 
-msgid "Whitelist file"
+msgid "n/a"
 msgstr ""
 
-msgid "see list details"
+msgid "paused"
 msgstr ""
index 2878d8a..08032ca 100644 (file)
+# liushuyu <liushuyu_011@163.com>, 2017.
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: kuoruan@gmail.com\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-10-28 16:06+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_CN\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.5\n"
+"X-Generator: Gtranslator 2.91.7\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
-msgid ""
-"). Note that list URLs and Shallalist category selections are not "
-"configurable via Luci."
-msgstr ")。需要注意的是列表URL和列表类别选项无法通过Luci设置。"
+msgid "-------"
+msgstr "-------"
 
 msgid "Adblock"
 msgstr "Adblock"
 
-msgid "Available blocklist sources ("
-msgstr "可用拦截列表来源("
+msgid "Adblock Logfile"
+msgstr "Adblock 日志文件"
+
+msgid "Adblock Status"
+msgstr "Adblock 状态"
+
+msgid "Adblock Version"
+msgstr "Adblock 版本"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "触发 Adblock 开始处理前的额外延迟(以秒为单位)。"
+
+msgid "Advanced"
+msgstr "高级"
 
-msgid "Backup directory"
+msgid "Available blocklist sources."
+msgstr "可用的 blocklist 来源。"
+
+msgid "Backup Directory"
 msgstr "备份目录"
 
-msgid "Backup options"
-msgstr "备份选项"
+msgid "Backup Mode"
+msgstr ""
 
-msgid "Blocklist sources"
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
 msgstr "拦截列表来源"
 
 msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"选择“none”以禁用自动启动,“timed”以使用默认的超时设定(默认 30 秒),或选择另"
+"一个触发接口。"
+
+msgid "Collecting data..."
+msgstr "正在收集数据..."
+
+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 backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS 后端(DNS 目录)"
+
+msgid "DNS Directory"
+msgstr "DNS 目录"
+
 msgid "Description"
 msgstr "描述"
 
-msgid "Enable adblock"
-msgstr "启用Adblock"
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr "启动期间不要自动更新 blocklists,改用 blocklists 的备份。"
 
-msgid "Enable blocklist backup"
-msgstr "启用拦截规则备份"
+msgid "Download Utility (SSL Library)"
+msgstr "下载实用程序(SSL 库)"
 
-msgid "Enable verbose debug logging"
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
 msgstr ""
 
+msgid "Edit Blacklist"
+msgstr "编辑黑名单"
+
+msgid "Edit Configuration"
+msgstr "编辑设置"
+
+msgid "Edit Whitelist"
+msgstr "编辑白名单"
+
+msgid "Enable Adblock"
+msgstr "启用 Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "启用 Blocklist 备份"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr "在出现任何处理错误的情况下启用详细调试日志记录。"
+
 msgid "Enabled"
-msgstr "启用"
+msgstr "å·²å\90¯ç\94¨"
 
-msgid "Extra options"
+msgid "Extra Options"
 msgstr "额外选项"
 
 msgid ""
-"File with whitelisted hosts/domains that are allowed despite being on a "
-"blocklist."
-msgstr "允许的主机/域名列表"
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"对于 SSL 保护的 blocklist 源,您需要一个合适的 SSL 库,例如'libustream-"
+"ssl'或 wget'built-in'。"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr "强制本地 DNS"
+
+msgid "Force Overall Sort"
+msgstr "强制整体排序"
+
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr "输入文件未找到,请检查您的配置。"
+
+msgid "Invalid domain specified!"
+msgstr "无效域名!"
+
+msgid "Last Run"
+msgstr "最后运行"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr "列表 URL 和 Shallalist 类别选择可在“高级”选项卡中配置。<br />"
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr "支持的 DNS 后端列表及其默认列表导出目录。<br />"
 
-msgid "Global options"
-msgstr "全局选项"
+msgid "Loading"
+msgstr "加载中"
+
+msgid "No"
+msgstr "否"
 
 msgid ""
 "Options for further tweaking in case the defaults are not suitable for you."
-msgstr "在默认设置并不适合时的额外选项。"
+msgstr "在默认设置并不适合时的额外选项。"
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Overall Domains"
 msgstr ""
 
+msgid "Overview"
+msgstr "总览"
+
 msgid ""
-"Space separated list of wan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"请每行只添加一个域。允许使用'#'开头的注释 - ip 地址、通配符和正则表达式都不"
+"允许。"
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "请在终端会话中直接编辑此文件。"
+
+msgid "Please update your adblock config file to use this package.<br />"
 msgstr ""
 
-msgid "Whitelist file"
-msgstr "白名单文件"
+msgid "Query"
+msgstr "查询"
+
+msgid "Query domains"
+msgstr "查询域"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr "将所有 DNS 查询从“lan”区域重定向到本地解析器。"
+
+msgid "Resume"
+msgstr "恢复"
+
+msgid "Runtime Information"
+msgstr "运行信息"
+
+msgid "SSL req."
+msgstr "SSL 要求"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Startup Trigger"
+msgstr "启动触发器"
+
+msgid "Suspend"
+msgstr "暂停"
+
+msgid "Suspend / Resume Adblock"
+msgstr "暂停/恢复 Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "生成的 blocklist 'adb_list.overall'的目标目录。"
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr "文件大小太大,无法在 LuCI(&gt; 512 KB)中进行在线编辑。"
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr "此表单允许您修改 adblock 黑名单(%s)的内容。<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr "此表单允许您修改 adblock 白名单(%s)的内容。<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr "此表单允许您修改主要 adblock 配置文件(/etc/config/adblock)的内容。"
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr "此表单允许您查询某些域的活动块列表,例如用于列出白名单。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr "此表单显示系统日志输出,仅针对 adblock 相关的消息进行了预筛选。"
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr "要覆盖默认路径,请使用下面额外部分中的“DNS 目录”选项。"
+
+msgid "Trigger Delay"
+msgstr "触发延迟"
+
+msgid "Verbose Debug Logging"
+msgstr "详细的调试记录"
+
+msgid "View Logfile"
+msgstr "查看日志文件"
+
+msgid "Waiting for command to complete..."
+msgstr "正在执行命令..."
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr "是"
+
+msgid "disabled"
+msgstr "已禁用"
+
+msgid "enabled"
+msgstr "已启用"
+
+msgid "error"
+msgstr "错误"
+
+msgid "n/a"
+msgstr "不可用"
+
+msgid "paused"
+msgstr "已暂停"
+
+#~ msgid ""
+#~ "Caution: Please don't select big lists or many lists at once on low "
+#~ "memory devices to prevent OOM exceptions!"
+#~ msgstr ""
+#~ "注意:请勿在内存较小的设备上选择过长的列表或同时选择多个列表,以防止 OOM "
+#~ "异常!"
+
+#~ msgid ""
+#~ "Create compressed blocklist backups, they will be used in case of "
+#~ "download errors or during startup in manual mode."
+#~ msgstr "创建压缩的 blocklist 备份,它们将在下载错误或手动模式下启动时使用。"
+
+#~ msgid ""
+#~ "Enable memory intense overall sort / duplicate removal on low memory "
+#~ "devices (&lt; 64 MB RAM)"
+#~ msgstr "在低内存设备上启用耗用内存的整体排序/重复规则删除(&lt;64 MB RAM)"
+
+#~ msgid ""
+#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
+#~ "documentation</a>"
+#~ msgstr "有关更多信息,请<a href=\"%s\" target=\"_blank\">参阅在线文档</a>"
+
+#~ msgid ""
+#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+#~ "config file or download a fresh default config from <a href=\"%s\" target="
+#~ "\"_blank\">here</a>"
+#~ msgstr ""
+#~ "在 OPKG 中,使用“--force-maintainer”选项覆盖预先存在的配置文件,或从<a "
+#~ "href=\"%s\" target=\"_blank\">此处</a>下载新的默认配置"
+
+#~ msgid ""
+#~ "List of available network interfaces. By default the startup will be "
+#~ "triggered by the 'wan' interface.<br />"
+#~ msgstr "可用网络接口列表。默认情况下,将由“wan”界面触发启动。<br />"
+
+#~ msgid "Manual / Backup mode"
+#~ msgstr "手动/备份模式"
+
+#~ msgid "Overall Blocked Domains"
+#~ msgstr "整体封锁域名"
+
+#~ msgid "Please update your adblock config file to use this package."
+#~ msgstr "请更新您的 adblock 配置文件以使用此软件包。"
+
+#~ msgid ""
+#~ "Target directory for adblock backups. Please use only non-volatile disks, "
+#~ "no ram/tmpfs drives."
+#~ msgstr ""
+#~ "adblock 备份的目标目录。请仅使用非易失性磁盘,不使用 ram/tmpfs 驱动器。"
+
+#~ msgid "DNS backend"
+#~ msgstr "DNS 后端"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "启用详细调试输出"
+
+#~ msgid "Resume adblock"
+#~ msgstr "恢复 Adblock"
+
+#~ msgid "Status"
+#~ msgstr "状态"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "暂停 Adblock"
+
+#~ msgid "active"
+#~ msgstr "已启用"
+
+#~ msgid "no domains blocked"
+#~ msgstr "没有被拦截的域名"
+
+#~ msgid "suspended"
+#~ msgstr "已暂停"
+
+#~ msgid "."
+#~ msgstr "."
+
+#~ msgid "For further information"
+#~ msgstr "更多信息"
+
+#~ msgid "see online documentation"
+#~ msgstr "查看在线文档"
+
+#~ msgid "Backup options"
+#~ msgstr "备份选项"
+
+#~ msgid ""
+#~ "). Note that list URLs and Shallalist category selections are not "
+#~ "configurable via Luci."
+#~ msgstr ")。需要注意的是列表URL和列表类别选项无法通过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 "Whitelist file"
+#~ msgstr "白名单文件"
 
-msgid "see list details"
-msgstr "查看列表详情"
+#~ msgid "see list details"
+#~ msgstr "查看列表详情"
 
 #~ msgid "Count"
 #~ msgstr "数量"
diff --git a/applications/luci-app-adblock/po/zh-tw/adblock.po b/applications/luci-app-adblock/po/zh-tw/adblock.po
new file mode 100644 (file)
index 0000000..f838fa0
--- /dev/null
@@ -0,0 +1,455 @@
+# liushuyu <liushuyu_011@163.com>, 2017.
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2017-10-28 16:06+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Language: zh_TW\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "-------"
+msgstr "-------"
+
+msgid "Adblock"
+msgstr "Adblock"
+
+msgid "Adblock Logfile"
+msgstr "Adblock 日誌檔案"
+
+msgid "Adblock Status"
+msgstr "Adblock 狀態"
+
+msgid "Adblock Version"
+msgstr "Adblock 版本"
+
+msgid "Additional trigger delay in seconds before adblock processing begins."
+msgstr "觸發 Adblock 開始處理前的額外延遲(以秒為單位)。"
+
+msgid "Advanced"
+msgstr "高階"
+
+msgid "Available blocklist sources."
+msgstr "可用的 blocklist 來源。"
+
+msgid "Backup Directory"
+msgstr "備份目錄"
+
+msgid "Backup Mode"
+msgstr ""
+
+msgid ""
+"Block access to all domains except those explicitly listed in the whitelist "
+"file."
+msgstr ""
+
+msgid "Blocklist Sources"
+msgstr "攔截列表來源"
+
+msgid ""
+"Caution: To prevent OOM exceptions on low memory devices with less than 64 "
+"MB free RAM, please do not select too many lists - 5-6 should be sufficient!"
+msgstr ""
+
+msgid ""
+"Choose 'none' to disable automatic startups, 'timed' to use a classic "
+"timeout (default 30 sec.) or select another trigger interface."
+msgstr ""
+"選擇“none”以禁用自動啟動,“timed”以使用預設的超時設定(預設 30 秒),或選擇另"
+"一個觸發介面。"
+
+msgid "Collecting data..."
+msgstr "正在收集資料..."
+
+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 backup mode."
+msgstr ""
+
+msgid "DNS Backend (DNS Directory)"
+msgstr "DNS 後端(DNS 目錄)"
+
+msgid "DNS Directory"
+msgstr "DNS 目錄"
+
+msgid "Description"
+msgstr "描述"
+
+msgid ""
+"Do not automatically update blocklists during startup, use blocklist backups "
+"instead."
+msgstr "啟動期間不要自動更新 blocklists,改用 blocklists 的備份。"
+
+msgid "Download Utility (SSL Library)"
+msgstr "下載實用程式(SSL 庫)"
+
+msgid ""
+"During opkg package installation use the '--force-maintainer' option to "
+"overwrite the pre-existing config file or download a fresh default config "
+"from <a href=\"%s\" target=\"_blank\">here</a>"
+msgstr ""
+
+msgid "Edit Blacklist"
+msgstr "編輯黑名單"
+
+msgid "Edit Configuration"
+msgstr "編輯設定"
+
+msgid "Edit Whitelist"
+msgstr "編輯白名單"
+
+msgid "Enable Adblock"
+msgstr "啟用 Adblock"
+
+msgid "Enable Blocklist Backup"
+msgstr "啟用 Blocklist 備份"
+
+msgid ""
+"Enable memory intense overall sort / duplicate removal on low memory devices "
+"(&lt; 64 MB free RAM)"
+msgstr ""
+
+msgid "Enable verbose debug logging in case of any processing error."
+msgstr "在出現任何處理錯誤的情況下啟用詳細除錯日誌記錄。"
+
+msgid "Enabled"
+msgstr "已啟用"
+
+msgid "Extra Options"
+msgstr "額外選項"
+
+msgid ""
+"For SSL protected blocklist sources you need a suitable SSL library, e.g. "
+"'libustream-ssl' or the wget 'built-in'."
+msgstr ""
+"對於 SSL 保護的 blocklist 源,您需要一個合適的 SSL 庫,例如'libustream-"
+"ssl'或 wget'built-in'。"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">check the online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force Local DNS"
+msgstr "強制本地 DNS"
+
+msgid "Force Overall Sort"
+msgstr "強制整體排序"
+
+msgid "Full path to the whitelist file."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr "輸入檔案未找到,請檢查您的配置。"
+
+msgid "Invalid domain specified!"
+msgstr "無效域名!"
+
+msgid "Last Run"
+msgstr "最後執行"
+
+msgid ""
+"List URLs and Shallalist category selections are configurable in the "
+"'Advanced' section.<br />"
+msgstr "列表 URL 和 Shallalist 類別選擇可在“高階”選項卡中配置。<br />"
+
+msgid ""
+"List of available network interfaces. Usually the startup will be triggered "
+"by the 'wan' interface.<br />"
+msgstr ""
+
+msgid ""
+"List of supported DNS backends with their default list export directory.<br /"
+">"
+msgstr "支援的 DNS 後端列表及其預設列表匯出目錄。<br />"
+
+msgid "Loading"
+msgstr "載入中"
+
+msgid "No"
+msgstr "否"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "在預設設定並不適合您時的額外選項。"
+
+msgid "Overall Domains"
+msgstr ""
+
+msgid "Overview"
+msgstr "總覽"
+
+msgid ""
+"Please add only one domain per line. Comments introduced with '#' are "
+"allowed - ip addresses, wildcards and regex are not."
+msgstr ""
+"請每行只新增一個域。允許使用'#'開頭的註釋 - ip 位址、萬用字元和正則表示式都"
+"不允許。"
+
+msgid "Please edit this file directly in a terminal session."
+msgstr "請在終端會話中直接編輯此檔案。"
+
+msgid "Please update your adblock config file to use this package.<br />"
+msgstr ""
+
+msgid "Query"
+msgstr "查詢"
+
+msgid "Query domains"
+msgstr "查詢域"
+
+msgid "Redirect all DNS queries from 'lan' zone to the local resolver."
+msgstr "將所有 DNS 查詢從“lan”區域重定向到本地解析器。"
+
+msgid "Resume"
+msgstr "恢復"
+
+msgid "Runtime Information"
+msgstr "執行資訊"
+
+msgid "SSL req."
+msgstr "SSL 要求"
+
+msgid "Save"
+msgstr "儲存"
+
+msgid "Startup Trigger"
+msgstr "啟動觸發器"
+
+msgid "Suspend"
+msgstr "暫停"
+
+msgid "Suspend / Resume Adblock"
+msgstr "暫停/恢復 Adblock"
+
+msgid ""
+"Target directory for adblock backups. Please use only non-volatile disks, e."
+"g. an external usb stick."
+msgstr ""
+
+msgid "Target directory for the generated blocklist 'adb_list.overall'."
+msgstr "生成的 blocklist 'adb_list.overall'的目標目錄。"
+
+msgid "The file size is too large for online editing in LuCI (&gt; 512 KB)."
+msgstr "檔案大小太大,無法在 LuCI(&gt; 512 KB)中進行線上編輯。"
+
+msgid ""
+"This form allows you to modify the content of the adblock blacklist (%s)."
+"<br />"
+msgstr "此表單允許您修改 adblock 黑名單(%s)的內容。<br />"
+
+msgid ""
+"This form allows you to modify the content of the adblock whitelist (%s)."
+"<br />"
+msgstr "此表單允許您修改 adblock 白名單(%s)的內容。<br />"
+
+msgid ""
+"This form allows you to modify the content of the main adblock configuration "
+"file (/etc/config/adblock)."
+msgstr "此表單允許您修改主要 adblock 配置檔案(/etc/config/adblock)的內容。"
+
+msgid ""
+"This form allows you to query active block lists for certain domains, e.g. "
+"for whitelisting."
+msgstr "此表單允許您查詢某些域的活動塊列表,例如用於列出白名單。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for adblock related messages "
+"only."
+msgstr "此表單顯示系統日誌輸出,僅針對 adblock 相關的訊息進行了預篩選。"
+
+msgid ""
+"To overwrite the default path use the 'DNS Directory' option in the extra "
+"section below."
+msgstr "要覆蓋預設路徑,請使用下面額外部分中的“DNS 目錄”選項。"
+
+msgid "Trigger Delay"
+msgstr "觸發延遲"
+
+msgid "Verbose Debug Logging"
+msgstr "詳細的除錯記錄"
+
+msgid "View Logfile"
+msgstr "檢視日誌檔案"
+
+msgid "Waiting for command to complete..."
+msgstr "正在執行命令..."
+
+msgid "Whitelist File"
+msgstr ""
+
+msgid "Whitelist Mode"
+msgstr ""
+
+msgid "Yes"
+msgstr "是"
+
+msgid "disabled"
+msgstr "已禁用"
+
+msgid "enabled"
+msgstr "已啟用"
+
+msgid "error"
+msgstr "錯誤"
+
+msgid "n/a"
+msgstr "不可用"
+
+msgid "paused"
+msgstr "已暫停"
+
+#~ msgid ""
+#~ "Caution: Please don't select big lists or many lists at once on low "
+#~ "memory devices to prevent OOM exceptions!"
+#~ msgstr ""
+#~ "注意:請勿在記憶體較小的裝置上選擇過長的列表或同時選擇多個列表,以防止 "
+#~ "OOM 異常!"
+
+#~ msgid ""
+#~ "Create compressed blocklist backups, they will be used in case of "
+#~ "download errors or during startup in manual mode."
+#~ msgstr "建立壓縮的 blocklist 備份,它們將在下載錯誤或手動模式下啟動時使用。"
+
+#~ msgid ""
+#~ "Enable memory intense overall sort / duplicate removal on low memory "
+#~ "devices (&lt; 64 MB RAM)"
+#~ msgstr ""
+#~ "在低記憶體裝置上啟用耗用記憶體的整體排序/重複規則刪除(&lt;64 MB RAM)"
+
+#~ msgid ""
+#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
+#~ "documentation</a>"
+#~ msgstr "有關更多資訊,請<a href=\"%s\" target=\"_blank\">參閱線上文件</a>"
+
+#~ msgid ""
+#~ "In OPKG use the '--force-maintainer' option to overwrite the pre-existing "
+#~ "config file or download a fresh default config from <a href=\"%s\" target="
+#~ "\"_blank\">here</a>"
+#~ msgstr ""
+#~ "在 OPKG 中,使用“--force-maintainer”選項覆蓋預先存在的配置檔案,或從<a "
+#~ "href=\"%s\" target=\"_blank\">此處</a>下載新的預設配置"
+
+#~ msgid ""
+#~ "List of available network interfaces. By default the startup will be "
+#~ "triggered by the 'wan' interface.<br />"
+#~ msgstr "可用網路介面列表。預設情況下,將由“wan”介面觸發啟動。<br />"
+
+#~ msgid "Manual / Backup mode"
+#~ msgstr "手動/備份模式"
+
+#~ msgid "Overall Blocked Domains"
+#~ msgstr "整體封鎖域名"
+
+#~ msgid "Please update your adblock config file to use this package."
+#~ msgstr "請更新您的 adblock 配置檔案以使用此軟體包。"
+
+#~ msgid ""
+#~ "Target directory for adblock backups. Please use only non-volatile disks, "
+#~ "no ram/tmpfs drives."
+#~ msgstr ""
+#~ "adblock 備份的目標目錄。請僅使用非易失性磁碟,不使用 ram/tmpfs 驅動器。"
+
+#~ msgid "DNS backend"
+#~ msgstr "DNS 後端"
+
+#~ msgid "Enable verbose debug logging"
+#~ msgstr "啟用詳細除錯輸出"
+
+#~ msgid "Resume adblock"
+#~ msgstr "恢復 Adblock"
+
+#~ msgid "Status"
+#~ msgstr "狀態"
+
+#~ msgid "Suspend adblock"
+#~ msgstr "暫停 Adblock"
+
+#~ msgid "active"
+#~ msgstr "已啟用"
+
+#~ msgid "no domains blocked"
+#~ msgstr "沒有被攔截的域名"
+
+#~ msgid "suspended"
+#~ msgstr "已暫停"
+
+#~ msgid "."
+#~ msgstr "."
+
+#~ msgid "For further information"
+#~ msgstr "更多資訊"
+
+#~ msgid "see online documentation"
+#~ msgstr "檢視線上文件"
+
+#~ msgid "Backup options"
+#~ msgstr "備份選項"
+
+#~ msgid ""
+#~ "). Note that list URLs and Shallalist category selections are not "
+#~ "configurable via Luci."
+#~ msgstr ")。需要注意的是列表URL和列表類別選項無法通過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 "Whitelist file"
+#~ msgstr "白名單檔案"
+
+#~ msgid "see list details"
+#~ msgstr "檢視列表詳情"
+
+#~ msgid "Count"
+#~ msgstr "數量"
+
+#~ msgid "IPv4 blackhole ip address"
+#~ msgstr "IPv4禁止列表"
+
+#~ msgid "IPv6 blackhole ip address"
+#~ msgstr "IPv6禁止列表"
+
+#~ msgid "List date/state"
+#~ msgstr "列表日期/狀態"
+
+#~ msgid "Name of the logical lan interface"
+#~ msgstr "LAN介面名稱"
+
+#~ msgid "Port of the adblock uhttpd instance"
+#~ msgstr "Adblock uhttpd埠"
+
+#~ msgid "Redirect all DNS queries to the local resolver"
+#~ msgstr "將所有DNS查詢都重定向到本地解析器"
+
+#~ msgid "Timeout for blocklist fetch (seconds)"
+#~ msgstr "列表查詢超時時間(秒)"
+
+#~ msgid "Total count of blocked domains"
+#~ msgstr "阻止域名總數"
+
+#~ msgid ""
+#~ "When adblock is active, all DNS queries are redirected to the local "
+#~ "resolver in this server by default. You can disable that to allow queries "
+#~ "to external DNS servers."
+#~ msgstr ""
+#~ "當Adblock處於活動狀態時,預設情況下會將所有的DNS查詢重定向到此伺服器的本地"
+#~ "解析器。您可以禁用以允許查詢外部DNS伺服器。"
diff --git a/applications/luci-app-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/sv/luci-app-advanced-reboot.po b/applications/luci-app-advanced-reboot/po/sv/luci-app-advanced-reboot.po
new file mode 100644 (file)
index 0000000..20d77cb
--- /dev/null
@@ -0,0 +1,109 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Action"
+msgstr "Åtgärd"
+
+msgid "Advanced Reboot"
+msgstr "Avancerad omstart"
+
+msgid "Alternative"
+msgstr "Alternativ"
+
+msgid "Cancel"
+msgstr "Avbryt"
+
+msgid "Confirm"
+msgstr "Bekräfta"
+
+msgid "Current"
+msgstr "Nuvarande"
+
+msgid "Firmware/OS (Kernel)"
+msgstr "Inre mjukvara/OS (Kärna)"
+
+msgid "Partition"
+msgstr "Partition"
+
+msgid "Partitions"
+msgstr "Partitioner"
+
+msgid "Perform power off..."
+msgstr "Utför avstängning..."
+
+msgid "Power Off Device"
+msgstr "Stäng av enhet"
+
+msgid "Proceed"
+msgstr "Fortsätt"
+
+msgid "Reboot Device to an Alternative Partition"
+msgstr "Starta om enheten till en alternativ partition"
+
+msgid "Reboot to alternative partition..."
+msgstr "Starta om till alternativ partition..."
+
+msgid "Reboot to current partition"
+msgstr "Starta om till nuvarande partition"
+
+msgid "Rebooting..."
+msgstr "Startar om..."
+
+msgid "Shutting down..."
+msgstr "Stänger av..."
+
+msgid "Status"
+msgstr "Status"
+
+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 ""
+"Systemet stänger ner nu.<br /> STÄNG INTE AV ENHETEN!<br /> Beroende på dina "
+"inställningar så kan det vara nödvändigt att förnya din dators adress för "
+"att nå enheten igen."
+
+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 ""
+"VARNING: Att stänga av kan resultera i en omstart i en enhet som inte har "
+"stöd för avstängning.<br /><br /> Klicka på \"Fortsätt\" nedanför för att "
+"stänga av din enhet."
+
+msgid "Warning: There are unsaved changes that will get lost on reboot!"
+msgstr ""
+"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
+
+msgid "Warning: This system does not have two partitions!"
+msgstr "Varning: Det här systemet har inte två partitioner!"
+
+msgid "Warning: This system does not support powering off!"
+msgstr "Varning: Det här systemet har inte stöd för avstängning!"
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 ""
index 55ec29c..741c145 100644 (file)
@@ -1,20 +1,20 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-03-29 23:07+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-02-17 17:07-0200\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"POT-Creation-Date: \n"
 
 msgid "AHCP Server"
 msgstr "Servidor AHCP"
 
-#, fuzzy
 msgid ""
 "AHCP is an autoconfiguration protocol for IPv6 and dual-stack IPv6/IPv4 "
 "networks designed to be used in place of router discovery or DHCP on "
index a7c7a38..db1cc35 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2014-04-27 22:52+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Umeaboy <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -20,6 +20,10 @@ msgid ""
 "networks where it is difficult or impossible to configure a server within "
 "every link-layer broadcast domain, for example mobile ad-hoc networks."
 msgstr ""
+"AHCP är ett autokonfigurationsprotokoll för IPv6 och dual-stack IPv6/IPv4- "
+"nätverk designade för att användas vid upptäckt av router eller DHCP på "
+"nätverk där det är svårt eller omöjligt att ställa in en server inom "
+"varje sändningslänkslags-domän, till exempel mobila ad-hocnätverk."
 
 msgid "Active AHCP Leases"
 msgstr "Aktiva AHCP-hyror"
diff --git a/applications/luci-app-aria2/po/pt-br/aria2.po b/applications/luci-app-aria2/po/pt-br/aria2.po
new file mode 100644 (file)
index 0000000..1bb4137
--- /dev/null
@@ -0,0 +1,236 @@
+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 "\"Falloc\" is not available in all cases."
+msgstr "\"Falloc\" não está disponível em todas as classes."
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr ""
+"<abbr title=\"Distributed Hash Table/Tabla de disperção distribuída\">DHT</"
+"abbr> habilitado"
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr ""
+"<abbr title=\"Local Peer Discovery/Descoberta de Parceiros Locais\">LPD</"
+"abbr> habilitado"
+
+msgid "Additional Bt tracker enabled"
+msgstr "Rastreadores BitTorrent adicionais habilitado"
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Configurações do Aria2"
+
+msgid "Aria2 Status"
+msgstr "Estado do Aria2"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr ""
+"Aria2 é um utilitário de transferência multi-protocolo de múltiplas fontes, "
+"aqui você pode configurá-lo."
+
+msgid "Autosave session interval"
+msgstr "Intervalo para autossalvamento da sessão"
+
+msgid "BitTorrent Settings"
+msgstr "Configurações do BitTorrent"
+
+msgid "BitTorrent listen port"
+msgstr "Porta de escuta do BitTorrent"
+
+msgid "Collecting data..."
+msgstr "Coletando dados..."
+
+msgid "Config file directory"
+msgstr "Diretório dos arquivos de configuração"
+
+msgid "Debug"
+msgstr "Depuração"
+
+msgid "Default download directory"
+msgstr "Diretório padrão de arquivos baixados"
+
+msgid "Disk cache"
+msgstr "Cache em Disco"
+
+msgid "Enable log"
+msgstr "Habilitar registros"
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid "Error"
+msgstr "Erro"
+
+msgid "Extra Settings"
+msgstr "Configurações Adicionais"
+
+msgid "Falloc"
+msgstr "Falloc"
+
+msgid "Files and Locations"
+msgstr "Arquivos e Locais"
+
+msgid "Follow torrent"
+msgstr "Seguir torrent"
+
+msgid "General Settings"
+msgstr "Configurações Gerais"
+
+msgid "Generate Randomly"
+msgstr "Gerar aleatoriamente"
+
+msgid "Info"
+msgstr "Informações"
+
+msgid "List of additional Bt tracker"
+msgstr "Lista de rastreadores BitTorrent adicionais"
+
+msgid "List of extra settings"
+msgstr "Lista de configurações adicionais"
+
+msgid "Log file is in the config file dir."
+msgstr ""
+"Arquivo de registro (log) está no diretório do arquivo de configuração."
+
+msgid "Log level"
+msgstr "Nível do registro"
+
+msgid "Max concurrent downloads"
+msgstr "Número máximo de transferencias simultâneas"
+
+msgid "Max connection per server"
+msgstr "Numero máximo de conexões por servidor"
+
+msgid "Max number of peers per torrent"
+msgstr "Numero máximo de parceiros por torrent"
+
+msgid "Max number of split"
+msgstr "Numero máximo de divisões"
+
+msgid "Min split size"
+msgstr "Tamanho mínimo da divisão"
+
+msgid "No Authentication"
+msgstr "Sem Autenticação"
+
+msgid "Notice"
+msgstr "Aviso"
+
+msgid "Off"
+msgstr "Desligado"
+
+msgid "Open WebUI-Aria2"
+msgstr "Abrir WebUI-Aria2"
+
+msgid "Open YAAW"
+msgstr "Abrir YAAW"
+
+msgid "Overall download limit"
+msgstr "Limite global para baixar"
+
+msgid "Overall speed limit enabled"
+msgstr "Limite da taxa de transferência global habilitado"
+
+msgid "Overall upload limit"
+msgstr "Limite global para subir"
+
+msgid "Per task download limit"
+msgstr "Limite por tarefa para baixar"
+
+msgid "Per task speed limit enabled"
+msgstr "Limite da taxa de transferência por tarefa habilitado"
+
+msgid "Per task upload limit"
+msgstr "Limite por tarefa para subir"
+
+msgid "Prealloc"
+msgstr "Pré-alocação"
+
+msgid "Preallocation"
+msgstr "Pré-alocação"
+
+msgid "Prefix of peer ID"
+msgstr "Prefixo da identificação do paceiro"
+
+msgid "RPC Token"
+msgstr ""
+"Chave eletrônica do <abbr title=\"Remote Procedure Call/Chamada de "
+"Procedimento Remoto\">RPC</abbr>"
+
+msgid "RPC authentication method"
+msgstr ""
+"Método de autenticação do <abbr title=\"Remote Procedure Call/Chamada de "
+"Procedimento Remoto\">RPC</abbr>"
+
+msgid "RPC password"
+msgstr ""
+"Senha do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto"
+"\">RPC</abbr>"
+
+msgid "RPC port"
+msgstr ""
+"Porta do <abbr title=\"Remote Procedure Call/Chamada de Procedimento Remoto"
+"\">RPC</abbr>"
+
+msgid "RPC username"
+msgstr ""
+"Nome do usuario do <abbr title=\"Remote Procedure Call/Chamada de "
+"Procedimento Remoto\">RPC</abbr>"
+
+msgid "Run daemon as user"
+msgstr "Executar serviço como usuário"
+
+msgid "Sec"
+msgstr "Segurança"
+
+msgid "Task Settings"
+msgstr "Configurações das tarefas"
+
+msgid "The Aria2 service is not running."
+msgstr "O serviço Aria2 está parado."
+
+msgid "The Aria2 service is running."
+msgstr "O serviço Aria2 está em execução."
+
+msgid "Token"
+msgstr "Chave eletrônica"
+
+msgid "Trunc"
+msgstr "Truncar"
+
+msgid "Use WebSocket"
+msgstr "Use WebSockets"
+
+msgid "User agent value"
+msgstr "Valor da identificação do agente do usuário"
+
+msgid "Username & Password"
+msgstr "Usuário & Senha"
+
+msgid "View Json-RPC URL"
+msgstr "Visualizar URL do JSON-RPC"
+
+msgid "Warn"
+msgstr "Atenção"
+
+msgid "in bytes, You can append K or M."
+msgstr "em bytes. Você pode sufixar com K (quilo) ou M (mega)."
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "em bytes por segundo. Você pode sufixar com K (quilo) ou M (mega)."
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..33613fa
--- /dev/null
@@ -0,0 +1,208 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "\"Falloc\" is not available in all cases."
+msgstr ""
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr ""
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr ""
+
+msgid "Additional Bt tracker enabled"
+msgstr ""
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Inställningar för Aria2"
+
+msgid "Aria2 Status"
+msgstr "Status för Aria2"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr ""
+
+msgid "Autosave session interval"
+msgstr "Autospara sessionintervall"
+
+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 "Lista över extra Bt-tracker"
+
+msgid "List of extra settings"
+msgstr "Lista över extra inställningar"
+
+msgid "Log file is in the config file dir."
+msgstr "Logg-filen är i konfigurationsfilens mapp."
+
+msgid "Log level"
+msgstr "Loggnivå"
+
+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 "Högst antal split"
+
+msgid "Min split size"
+msgstr "Minsta split-storlek"
+
+msgid "No Authentication"
+msgstr "Ingen autentisering"
+
+msgid "Notice"
+msgstr "Avisering"
+
+msgid "Off"
+msgstr "Av"
+
+msgid "Open WebUI-Aria2"
+msgstr "Öppna WebUI-Aria2"
+
+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 "Förallokering"
+
+msgid "Prefix of peer ID"
+msgstr "Peer-ID prefix"
+
+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 "Inställningar för uppgifter"
+
+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 "Tecken"
+
+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 "Visa Json-RPC URL"
+
+msgid "Warn"
+msgstr "Varna"
+
+msgid "in bytes, You can append K or M."
+msgstr "i bytes, Du kan bifoga K eller M."
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "i bytes/sek, Du kan bifoga K eller M."
index 823699d..0b7eea2 100644 (file)
-msgid "Aria2"
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
 msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-28 16:10+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
-msgid "Aria2 is a multi-protocol &amp; multi-source download utility, here you can configure the settings."
-msgstr "Aria2 是一个支持多协议多线程的下载器, 你可以在这里对其进行配置"
-
-msgid "Aria2 Status"
-msgstr "Aria2 状态"
+msgid "\"Falloc\" is not available in all cases."
+msgstr "\"Falloc\" 并不是在所有情况下都可用"
 
-msgid "Open YAAW"
-msgstr "打开YAAW"
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
 
-msgid "Open WebUI-Aria2"
-msgstr "打开WebUI-Aria2"
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
 
-msgid "The Aria2 service is running."
-msgstr "Aria2 正在运行"
+msgid "Additional Bt tracker enabled"
+msgstr "添加额外的Tracker"
 
-msgid "The Aria2 service is not running."
-msgstr "Aria2 未运行"
+msgid "Aria2"
+msgstr "Aria2"
 
 msgid "Aria2 Settings"
 msgstr "Aria2 配置"
 
-msgid "General settings"
-msgstr "一般设置"
-
-msgid "Files and Locations"
-msgstr "文件和目录"
+msgid "Aria2 Status"
+msgstr "Aria2 状态"
 
-msgid "Enabled"
-msgstr "启用"
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr "Aria2 是一个支持多协议多线程的下载器, 您可以在这里对其进行配置。"
 
-msgid "Task Settings"
-msgstr "任务设置"
+msgid "Autosave session interval"
+msgstr "定时保存会话间隔"
 
 msgid "BitTorrent Settings"
-msgstr "BT设置"
+msgstr "BitTorrent 设置"
 
-msgid "Run daemon as user"
-msgstr "以此用户权限运行"
+msgid "BitTorrent listen port"
+msgstr "BitTorrent 监听端口"
 
-msgid "RPC port"
-msgstr "RPC端口"
+msgid "Collecting data..."
+msgstr "正在收集数据..."
 
-msgid "RPC authentication method"
-msgstr "RPC认证方式"
+msgid "Config file directory"
+msgstr "配置文件目录"
 
-msgid "No Authentication"
-msgstr "无认证"
+msgid "Debug"
+msgstr "调试"
 
-msgid "Username & Password"
-msgstr "用户名与密码"
+msgid "Default download directory"
+msgstr "默认下载目录"
 
-msgid "Token"
-msgstr "令牌"
+msgid "Disk cache"
+msgstr "磁盘缓存"
 
-msgid "RPC username"
-msgstr "RPC用户名"
+msgid "Enable log"
+msgstr "启用日志"
 
-msgid "RPC password"
-msgstr "RPC密码"
+msgid "Enabled"
+msgstr "启用"
 
-msgid "RPC Token"
-msgstr "RPC令牌"
+msgid "Error"
+msgstr "错误"
 
-msgid "Generate Randomly"
-msgstr "é\9a\8fæ\9cºç\94\9fæ\88\90"
+msgid "Extra Settings"
+msgstr "é\99\84å\8a é\80\89项"
 
-msgid "Enable log"
-msgstr "å\90¯ç\94¨æ\97¥å¿\97"
+msgid "Falloc"
+msgstr "å¿«é\80\9f allocï¼\88Fallocï¼\89"
 
-msgid "Log file is in the config file dir."
-msgstr "æ\97¥å¿\97æ\96\87件å\9c¨é\85\8dç½®æ\96\87件ç\9b®å½\95ä¸\8b"
+msgid "Files and Locations"
+msgstr "æ\96\87件å\92\8cç\9b®å½\95"
 
-msgid "Log level"
-msgstr "日志记录等级"
+msgid "Follow torrent"
+msgstr "自动添加下载的种子"
 
-msgid "Debug"
-msgstr "调试"
+msgid "General Settings"
+msgstr ""
+
+msgid "Generate Randomly"
+msgstr "随机生成"
 
 msgid "Info"
 msgstr "信息"
 
-msgid "Notice"
-msgstr "注意"
+msgid "List of additional Bt tracker"
+msgstr "附加 Bt tracker 列表"
 
-msgid "Warn"
-msgstr "警告"
+msgid "List of extra settings"
+msgstr "附加选项列表"
 
-msgid "Error"
-msgstr "错误"
+msgid "Log file is in the config file dir."
+msgstr "日志文件在配置文件目录下"
 
-msgid "Config file directory"
-msgstr "配置文件目录"
+msgid "Log level"
+msgstr "日志记录等级"
 
-msgid "Default download directory"
-msgstr "默认下载目录"
+msgid "Max concurrent downloads"
+msgstr "最大同时下载任务数"
 
-msgid "Disk cache"
-msgstr "磁盘缓存"
+msgid "Max connection per server"
+msgstr "单服务器最大连接数"
 
-msgid "in bytes, You can append K or M."
-msgstr "å\8d\95ä½\8d B, ä½ å\8f¯ä»¥å\9c¨æ\95°å­\97å\90\8eè·\9fä¸\8a K æ\88\96 M"
+msgid "Max number of peers per torrent"
+msgstr "å\8d\95个ç§\8då­\90æ\9c\80大è¿\9eæ\8e¥æ\95°"
 
-msgid "Preallocation"
-msgstr "磁盘预分配"
+msgid "Max number of split"
+msgstr "单文件最大线程数"
 
-msgid "Off"
-msgstr "关闭"
+msgid "Min split size"
+msgstr "最小文件分片大小"
 
-msgid "Prealloc"
-msgstr ""
+msgid "No Authentication"
+msgstr "无认证"
 
-msgid "Trunc"
-msgstr ""
+msgid "Notice"
+msgstr "注意"
 
-msgid "Falloc"
-msgstr ""
+msgid "Off"
+msgstr "关闭"
 
-msgid "\"Falloc\" is not available in all cases."
-msgstr "\"Falloc\" 并不是在所有情况下都可用"
+msgid "Open WebUI-Aria2"
+msgstr "打开 WebUI-Aria2"
 
-msgid "Overall speed limit enabled"
-msgstr "启用全局限速"
+msgid "Open YAAW"
+msgstr "打开 YAAW"
 
 msgid "Overall download limit"
 msgstr "全局下载限速"
 
-msgid "in bytes/sec, You can append K or M."
-msgstr "å\8d\95ä½\8d B/s, ä½ å\8f¯ä»¥å\9c¨æ\95°å­\97å\90\8eè·\9fä¸\8a K æ\88\96 M"
+msgid "Overall speed limit enabled"
+msgstr "å\90¯ç\94¨å\85¨å±\80é\99\90é\80\9f"
 
 msgid "Overall upload limit"
 msgstr "全局上传限速"
 
-msgid "Per task speed limit enabled"
-msgstr "启用单任务限速"
-
 msgid "Per task download limit"
 msgstr "单任务下载限速"
 
+msgid "Per task speed limit enabled"
+msgstr "启用单任务限速"
+
 msgid "Per task upload limit"
 msgstr "单任务上传限速"
 
-msgid "Max concurrent downloads"
-msgstr "最大同时下载任务数"
+msgid "Prealloc"
+msgstr "预分配"
 
-msgid "Max connection per server"
-msgstr "单服务器最大连接数"
+msgid "Preallocation"
+msgstr "磁盘预分配"
 
-msgid "Min split size"
-msgstr "最小文件分片大小"
+msgid "Prefix of peer ID"
+msgstr "Peer ID 前缀"
 
-msgid "Max number of split"
-msgstr "单文件最大线程数"
+msgid "RPC Token"
+msgstr "RPC 令牌"
 
-msgid "Autosave session interval"
-msgstr "定时保存会话间隔"
+msgid "RPC authentication method"
+msgstr "RPC 认证方式"
 
-msgid "Sec"
-msgstr ""
+msgid "RPC password"
+msgstr "RPC 密码"
 
-msgid "User agent value"
-msgstr "用户代理(UA)"
+msgid "RPC port"
+msgstr "RPC 端口"
 
-msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
-msgstr "启用<abbr title=\"分布式哈希表\">DHT</abbr>"
+msgid "RPC username"
+msgstr "RPC 用户名"
 
-msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
-msgstr "启用<abbr title=\"本地节点发现\">LPD</abbr>"
+msgid "Run daemon as user"
+msgstr "以此用户权限运行"
 
-msgid "Follow torrent"
-msgstr "自动添加下载的种子"
+msgid "Sec"
+msgstr ""
 
-msgid "BitTorrent listen port"
-msgstr "BT监听端口"
+msgid "Task Settings"
+msgstr "任务设置"
 
-msgid "Max number of peers per torrent"
-msgstr "单个种子最大连接数"
+msgid "The Aria2 service is not running."
+msgstr "Aria2 未运行"
 
-msgid "Additional Bt tracker enabled"
-msgstr "添加额外的Tracker"
+msgid "The Aria2 service is running."
+msgstr "Aria2 正在运行"
 
-msgid "List of additional Bt tracker"
-msgstr "附加Tracker列表"
+msgid "Token"
+msgstr "令牌"
 
-msgid "Prefix of peer ID"
-msgstr "Peer ID前缀"
+msgid "Trunc"
+msgstr ""
 
-msgid "Extra Settings"
-msgstr "附加选项"
+msgid "Use WebSocket"
+msgstr "使用 WebSocket"
 
-msgid "List of extra settings"
-msgstr "附加选项列表"
+msgid "User agent value"
+msgstr "用户代理(UA)"
+
+msgid "Username & Password"
+msgstr "用户名与密码"
 
 msgid "View Json-RPC URL"
 msgstr "查看 Json-RPC URL"
 
-msgid "Use WebSocket"
-msgstr "使用WebSocket"
+msgid "Warn"
+msgstr "警告"
+
+msgid "in bytes, You can append K or M."
+msgstr "单位 B, 您可以在数字后跟上 K 或 M。"
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "单位 B/s, 您可以在数字后跟上 K 或 M。"
+
+#~ msgid "General settings"
+#~ msgstr "基本设置"
diff --git a/applications/luci-app-aria2/po/zh-tw/aria2.po b/applications/luci-app-aria2/po/zh-tw/aria2.po
new file mode 100644 (file)
index 0000000..ebeeeee
--- /dev/null
@@ -0,0 +1,218 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-28 16:10+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+msgid "\"Falloc\" is not available in all cases."
+msgstr "\"Falloc\" 並不是在所有情況下都可用"
+
+msgid "<abbr title=\"Distributed Hash Table\">DHT</abbr> enabled"
+msgstr "啟用<abbr title=\"分散式雜湊表\">DHT</abbr>"
+
+msgid "<abbr title=\"Local Peer Discovery\">LPD</abbr> enabled"
+msgstr "啟用<abbr title=\"本地節點發現\">LPD</abbr>"
+
+msgid "Additional Bt tracker enabled"
+msgstr "新增額外的Tracker"
+
+msgid "Aria2"
+msgstr "Aria2"
+
+msgid "Aria2 Settings"
+msgstr "Aria2 配置"
+
+msgid "Aria2 Status"
+msgstr "Aria2 狀態"
+
+msgid "General settings"
+msgstr "基本設定"
+
+msgid "Files and Locations"
+msgstr "檔案和目錄"
+
+msgid ""
+"Aria2 is a multi-protocol &amp; multi-source download utility, here you can "
+"configure the settings."
+msgstr "Aria2 是一個支援多協議多執行緒的下載器, 您可以在這裡對其進行配置。"
+
+msgid "Autosave session interval"
+msgstr "定時儲存會話間隔"
+
+msgid "BitTorrent Settings"
+msgstr "BitTorrent 設定"
+
+msgid "BitTorrent listen port"
+msgstr "BitTorrent 監聽埠"
+
+msgid "Collecting data..."
+msgstr "正在收集資料..."
+
+msgid "Config file directory"
+msgstr "配置檔案目錄"
+
+msgid "Debug"
+msgstr "除錯"
+
+msgid "Default download directory"
+msgstr "預設下載目錄"
+
+msgid "Disk cache"
+msgstr "磁碟快取"
+
+msgid "Enable log"
+msgstr "啟用日誌"
+
+msgid "Enabled"
+msgstr "啟用"
+
+msgid "Error"
+msgstr "錯誤"
+
+msgid "Extra Settings"
+msgstr "附加選項"
+
+msgid "Falloc"
+msgstr "快速 alloc(Falloc)"
+
+msgid "Follow torrent"
+msgstr "自動新增下載的種子"
+
+msgid "Generate Randomly"
+msgstr "隨機生成"
+
+msgid "Info"
+msgstr "資訊"
+
+msgid "List of additional Bt tracker"
+msgstr "附加 Bt tracker 列表"
+
+msgid "List of extra settings"
+msgstr "附加選項列表"
+
+msgid "Log file is in the config file dir."
+msgstr "日誌檔案在配置檔案目錄下"
+
+msgid "Log level"
+msgstr "日誌記錄等級"
+
+msgid "Max concurrent downloads"
+msgstr "最大同時下載任務數"
+
+msgid "Max connection per server"
+msgstr "單伺服器最大連線數"
+
+msgid "Max number of peers per torrent"
+msgstr "單個種子最大連線數"
+
+msgid "Max number of split"
+msgstr "單檔案最大執行緒數"
+
+msgid "Min split size"
+msgstr "最小檔案分片大小"
+
+msgid "No Authentication"
+msgstr "無認證"
+
+msgid "Notice"
+msgstr "注意"
+
+msgid "Off"
+msgstr "關閉"
+
+msgid "Open WebUI-Aria2"
+msgstr "開啟 WebUI-Aria2"
+
+msgid "Open YAAW"
+msgstr "開啟 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 "預分配"
+
+msgid "Preallocation"
+msgstr "磁碟預分配"
+
+msgid "Prefix of peer ID"
+msgstr "Peer ID 字首"
+
+msgid "RPC Token"
+msgstr "RPC 令牌"
+
+msgid "RPC authentication method"
+msgstr "RPC 認證方式"
+
+msgid "RPC password"
+msgstr "RPC 密碼"
+
+msgid "RPC port"
+msgstr "RPC 埠"
+
+msgid "RPC username"
+msgstr "RPC 使用者名稱"
+
+msgid "Run daemon as user"
+msgstr "以此使用者許可權執行"
+
+msgid "Sec"
+msgstr "秒"
+
+msgid "Task Settings"
+msgstr "任務設定"
+
+msgid "The Aria2 service is not running."
+msgstr "Aria2 未執行"
+
+msgid "The Aria2 service is running."
+msgstr "Aria2 正在執行"
+
+msgid "Token"
+msgstr "令牌"
+
+msgid "Trunc"
+msgstr ""
+
+msgid "Use WebSocket"
+msgstr "使用 WebSocket"
+
+msgid "User agent value"
+msgstr "使用者代理(UA)"
+
+msgid "Username & Password"
+msgstr "使用者名稱與密碼"
+
+msgid "View Json-RPC URL"
+msgstr "檢視 Json-RPC URL"
+
+msgid "Warn"
+msgstr "警告"
+
+msgid "in bytes, You can append K or M."
+msgstr "單位 B, 您可以在數字後跟上 K 或 M。"
+
+msgid "in bytes/sec, You can append K or M."
+msgstr "單位 B/s, 您可以在數字後跟上 K 或 M。"
diff --git a/applications/luci-app-attendedsysupgrade/Makefile b/applications/luci-app-attendedsysupgrade/Makefile
new file mode 100644 (file)
index 0000000..8d7a616
--- /dev/null
@@ -0,0 +1,11 @@
+# See /LICENSE for more information.
+# This is free software, licensed under the GNU General Public License v2.
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for attended sysupgrades
+LUCI_DEPENDS:=+luci-base +uhttpd-mod-ubus +rpcd-mod-attendedsysupgrade
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua b/applications/luci-app-attendedsysupgrade/luasrc/controller/attendedsysupgrade.lua
new file mode 100644 (file)
index 0000000..1bd050a
--- /dev/null
@@ -0,0 +1,5 @@
+module("luci.controller.attendedsysupgrade", package.seeall)
+
+function index()
+        entry({"admin", "system", "attended_sysupgrade"}, template("attendedsysupgrade"), _("Attended Sysupgrade"), 1)
+end
diff --git a/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm b/applications/luci-app-attendedsysupgrade/luasrc/view/attendedsysupgrade.htm
new file mode 100644 (file)
index 0000000..e1f715d
--- /dev/null
@@ -0,0 +1,422 @@
+<%
+-- all lua code provided by https://github.com/jow-/
+-- thank you very much!
+
+    function apply_acls(filename, session)
+        local json = require "luci.jsonc"
+        local util = require "luci.util"
+        local fs   = require "nixio.fs"
+
+        local grants = { }
+
+        local acl = json.parse(fs.readfile(filename))
+        if type(acl) ~= "table" then
+            return
+        end
+
+        local group, perms
+        for group, perms in pairs(acl) do
+            local perm, scopes
+            for perm, scopes in pairs(perms) do
+                if type(scopes) == "table" then
+                    local scope, objects
+                    for scope, objects in pairs(scopes) do
+                        if type(objects) == "table" then
+                            if not grants[scope] then
+                                grants[scope] = { }
+                            end
+
+                            if next(objects) == 1 then
+                                local _, object
+                                for _, object in ipairs(objects) do
+                                    if not grants[scope][object] then
+                                        grants[scope][object] = { }
+                                    end
+                                    table.insert(grants[scope][object], perm)
+                                end
+                            else
+                                local object, funcs
+                                for object, funcs in pairs(objects) do
+                                    if type(funcs) == "table" then
+                                        local _, func
+                                        for _, func in ipairs(funcs) do
+                                            if not grants[scope][object] then
+                                                grants[scope][object] = { }
+                                            end
+                                            table.insert(grants[scope][object], func)
+                                        end
+                                    end
+                                end
+                            end
+                        end
+                    end
+                end
+            end
+        end
+
+        local _, scope, object, func
+        for scope, _ in pairs(grants) do
+            local objects = { }
+            for object, _ in pairs(_) do
+                for _, func in ipairs(_) do
+                    table.insert(objects, { object, func })
+                end
+            end
+
+            util.ubus("session", "grant", {
+                ubus_rpc_session = session,
+                scope = scope, objects = objects
+            })
+        end
+    end
+
+    apply_acls("/usr/share/rpcd/acl.d/attendedsysupgrade.json", luci.dispatcher.context.authsession)
+    apply_acls("/usr/share/rpcd/acl.d/packagelist.json", luci.dispatcher.context.authsession)
+%>
+<%+header%>
+<h2 name="content"><%:Attended Sysupgrade%></h2>
+<div class="cbi-map-descr">
+       Easily search and install new releases and package upgrades. Sysupgrade images are created on demand based on locally installed packages.
+</div>
+<div style="display: none" id="upgrade_info" class="alert-message info"></div>
+<div style="display: none" id="upgrade_error" class="alert-message danger"></div>
+<div style="display: none" id="packages" class="alert-message success"></div>
+<p>
+<textarea style="display: none; width: 100%;" id="edit_packages" rows="15"></textarea>
+</p>
+<fieldset class="cbi-section">
+       <form method="post" action="">
+               <div class="cbi-selection-node">
+                       <div class="cbi-value" id="keep_container" style="display: none">
+                               <div class="cbi-section-descr">
+                                       Check "Keep settings" to retain the current configuration (requires a compatible firmware image).
+                               </div>
+                               <label class="cbi-value-title" for="keep">Keep settings:</label>
+                               <div class="cbi-value-field">
+                                       <input name="keep" id="keep" checked="checked" type="checkbox">
+                               </div>
+                       </div>
+                       <div class="cbi-value" id="edit_button" style="display: none">
+                               <div class="cbi-value-field">
+                                       <input class="cbi-button" value="edit installed packages" onclick="edit_packages()" type="button">
+                               </div>
+                       </div>
+                       <div class="cbi-value cbi-value-last">
+                               <div class="cbi-value-field">
+                                       <input class="cbi-button cbi-input-apply" value="Search for upgrades" style="display: none" onclick="upgrade_check()" type="button" id="upgrade_button">
+                               </div>
+                       </div>
+               </div>
+       </form>
+</fieldset>
+<script type="text/javascript">
+latest_version = "";
+data = {};
+origin = document.location.href.replace(location.pathname, "")
+ubus_url = origin + "/ubus/"
+
+function edit_packages() {
+       data.edit_packages = true
+       document.getElementById("edit_button").style.display = "none";
+       document.getElementById("edit_packages").value = data.packages.join("\n");
+       document.getElementById("edit_packages").style.display = "block";
+}
+
+// requests to the upgrade server
+function server_request(request_dict, path, callback) {
+       request_dict.distro = data.release.distribution;
+       request_dict.target = data.release.target.split("\/")[0];
+       request_dict.subtarget = data.release.target.split("\/")[1];
+       var request = new XMLHttpRequest();
+       request.open("POST", data.url + "/" + path, true);
+       request.setRequestHeader("Content-type", "application/json");
+       request.send(JSON.stringify(request_dict));
+       request.onerror = function(e) {
+               upgrade_error("upgrade server down")
+       }
+       request.addEventListener('load', function(event) {
+               callback(request)
+       });
+}
+
+// initial setup, get system information
+function setup() {
+       data["ubus_rpc_session"] = "<%=luci.dispatcher.context.authsession%>"
+       ubus_call("packagelist", "list", {}, "packagelist");
+       ubus_call("system", "board", {}, "release");
+       ubus_call("system", "board", {}, "board_name");
+       ubus_call("system", "board", {}, "model");
+       uci_call({ "config": "attendedsysupgrade", "section": "server", "option": "url" })
+       uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "upgrade_packages" })
+       uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "advanced_mode" })
+       uci_call({ "config": "attendedsysupgrade", "section": "client", "option": "auto_search" })
+       setup_ready();
+}
+
+function setup_ready() {
+       if(ubus_counter != ubus_closed) {
+               setTimeout(setup_ready, 300)
+       } else {
+               if(data.auto_search == 1) {
+                       upgrade_check();
+               } else {
+                       document.getElementById("upgrade_button").style.display = "block";
+               }
+       }
+}
+
+function uci_call(option) {
+       ubus_call("uci", "get", option, option["option"])
+}
+
+ubus_counter = 0;
+ubus_closed = 0;
+function ubus_call(command, argument, params, variable) {
+       request_data = {};
+       request_data.jsonrpc = "2.0";
+       request_data.id = ubus_counter;
+       request_data.method = "call";
+       request_data.params = [ data.ubus_rpc_session, command, argument, params ]
+       ubus_counter++;
+       var request = new XMLHttpRequest();
+       request.open("POST", ubus_url, true);
+       request.setRequestHeader("Content-type", "application/json");
+       request.addEventListener('load', function(event) {
+               if(request.status === 200) {
+                       request_json = JSON.parse(request.responseText).result[1]
+                       if(command === "uci") {
+                               data[variable] = request_json.value
+                       } else {
+                               if (variable == "release") {
+                                       latest_version = request_json.release.version
+                               }
+                               data[variable] = request_json[variable]
+                       }
+                       ubus_closed++;
+               }
+       });
+       request.send(JSON.stringify(request_data));
+}
+
+// shows notification if upgrade is available
+function upgrade_info(info_output, loading) {
+       document.getElementById("upgrade_info").style.display = "block";
+       if(loading) {
+               loading_image = '<img src="/luci-static/resources/icons/loading.gif">'
+       } else {
+               loading_image = ''
+       }
+       document.getElementById("upgrade_info").innerHTML = loading_image + info_output;
+}
+
+function upgrade_error(error_output) {
+       document.getElementById("upgrade_error").style.display = "block";
+       document.getElementById("upgrade_error").innerHTML = error_output;
+       document.getElementById("upgrade_info").style.display = "none";
+}
+
+// asks server for news upgrades, actually only based on relesae not packages
+function upgrade_check() {
+       upgrade_info("Searching for upgrades", true);
+       request_dict = {}
+       request_dict.version = data.release.version;
+       request_dict.packages = data.packagelist;
+       // not only search for new release, but for new package versions as well
+       request_dict.upgrade_packages = data.upgrade_packages
+       server_request(request_dict, "api/upgrade-check", upgrade_check_callback)
+}
+
+// request the image, need merge with upgrade_request
+function upgrade_request() {
+       console.log("upgrade_request")
+       document.getElementById("upgrade_button").disabled = true;
+       document.getElementById("edit_packages").style.display = "none";
+       document.getElementById("edit_button").style.display = "none";
+       document.getElementById("keep_container").style.display = "none";
+       request_dict = {}
+       request_dict.version = latest_version;
+       request_dict.board = data.board_name
+
+       if(data.edit_packages == true) {
+               request_dict.packages = document.getElementById("edit_packages").value.split("\n")
+       } else {
+               request_dict.packages = data.packages;
+       }
+       request_dict.model = data.model
+       server_request(request_dict, "api/upgrade-request", upgrade_request_callback)
+}
+
+function upgrade_request_callback(response) {
+       if (response.status === 400) {
+               response_content = JSON.parse(response.responseText)
+               upgrade_error(response_content.error)
+       } else if (response.status === 500) {
+               response_content = JSON.parse(response.responseText)
+               upgrade_error(response_content.error)
+               if(response_content.log != undefined) {
+                       data.log_url = response_content.log
+               }
+       } else if (response.status === 503) {
+               upgrade_error("please wait. server overloaded")
+               // handle overload
+               setTimeout(upgrade_request, 30000)
+       } else if (response.status === 201) {
+               response_content = JSON.parse(response.responseText)
+               if(response_content.queue != undefined) {
+                       // in queue
+                       upgrade_info("please wait. you are in queue position " + response_content.queue, true)
+                       console.log("queued")
+               } else {
+                       upgrade_info("imagebuilder not ready, please wait", true)
+                       console.log("setting up imagebuilder")
+               }
+               setTimeout(upgrade_request, 5000)
+       } else if (response.status === 206) {
+               // building
+               console.log("building")
+               upgrade_info("building image", true)
+               setTimeout(upgrade_request, 5000)
+       } else if (response.status === 200) {
+               // ready to download
+               response_content = JSON.parse(response.responseText);
+               data.sysupgrade_url = response_content.sysupgrade;
+
+               info_output = "Image created"
+               if(data.advanced_mode == 1) {
+                       build_log = '</br><a target="_blank" href="' + data.sysupgrade_url + '.log">Build log</a>'
+                       info_output += build_log
+               }
+               upgrade_info(info_output);
+
+               document.getElementById("keep_container").style.display = "block";
+               document.getElementById("upgrade_button").disabled = false;
+               document.getElementById("upgrade_button").style.display = "block";
+               document.getElementById("upgrade_button").value = "Sysupgrade";
+               document.getElementById("upgrade_button").onclick = download_image;
+       }
+}
+
+// uploads received blob data to the server using cgi-io
+function upload_image(blob) {
+       var upload_request = new XMLHttpRequest();
+       var form_data  = new FormData();
+
+       form_data.append("sessionid", data.ubus_rpc_session)
+       form_data.append("filename", "/tmp/sysupgrade.bin")
+       form_data.append("filemode", 755) // insecure?
+       form_data.append("filedata", blob)
+
+       upload_request.addEventListener('load', function(event) {
+               // this checksum should be parsed
+               upgrade_info("Flashing firmware", true)
+               ubus_call("attendedsysupgrade", "sysupgrade", { "keep_settings": document.getElementById("keep").checked }, 'message');
+               setTimeout(ping_ubus, 5000)
+               console.log(data.message);
+       });
+
+       upload_request.addEventListener('error', function(event) {
+               upgrade_info("uploading failed, please retry")
+       });
+
+       upload_request.open('POST', origin + '/cgi-bin/cgi-upload');
+       upload_request.send(form_data);
+}
+
+function ping_ubus() {
+       var request = new XMLHttpRequest();
+       request.open("GET", ubus_url, true);
+       request.addEventListener('error', function(event) {
+               upgrade_info("Rebooting", true);
+               setTimeout(ping_ubus, 1000)
+       });
+       request.addEventListener('load', function(event) {
+               upgrade_info("Success! Please reload web interface");
+               document.getElementById("upgrade_button").value = "reload page";
+               document.getElementById("upgrade_button").style.display = "block";
+               document.getElementById("upgrade_button").disabled = false;
+               document.getElementById("upgrade_button").onclick = function() { location.reload(); }
+       });
+       request.send();
+}
+
+// download image from server once the url was received by upgrade_request
+function download_image() {
+       console.log("download_image")
+       document.getElementById("keep_container").style.display = "none";
+       document.getElementById("upgrade_button").style.display = "none";
+       var download_request = new XMLHttpRequest();
+       download_request.open("GET", data.sysupgrade_url);
+       download_request.responseType = "arraybuffer";
+
+       download_request.onload = function () {
+               if (this.status === 200) {
+                       var blob = new Blob([download_request.response], {type: "application/octet-stream"});
+                       upload_image(blob)
+               }
+       };
+       upgrade_info("downloading image", true);
+       download_request.send();
+}
+
+function upgrade_check_callback(response_object) {
+       if (response_object.status === 500) {
+               // python crashed
+               upgrade_error("internal server error, please try again later")
+               console.log("upgrade server issue")
+       } else if (response_object.status === 502) {
+               // python part offline
+               upgrade_error("internal server error, please try again later")
+               console.log("upgrade server issue")
+       } else if (response_object.status === 503) {
+               // handle overload
+               upgrade_error("server overloaded, retry in 5 minutes")
+               console.log("server overloaded")
+               setTimeout(upgrade_request, 300000)
+       } else if (response_object.status === 201) {
+               upgrade_info("Setting up ImageBuilder", true)
+               console.log("setting up imagebuilder")
+               setTimeout(upgrade_request, 5000)
+       } else if (response_object.status === 204) {
+               // no upgrades
+               upgrade_info("No upgrades available")
+       } else if (response_object.status === 400) {
+               // bad request
+               console.log(response_object.responseText)
+               response_object_content = JSON.parse(response_object.responseText)
+               upgrade_error(response_object_content.error)
+       } else if (response_object.status === 200) {
+               // new release/upgrades
+               response_content = JSON.parse(response_object.responseText)
+
+               // create simple output to tell user whats going to be upgrade (release/packages)
+               info_output = ""
+               if(response_content.version != undefined) {
+                       info_output += "<h3>new upgrade available</h3>"
+                       info_output += data.release.version + " to " + response_content.version
+                       latest_version = response_content.version;
+               }
+               if(response_content.upgrades != undefined) {
+                       info_output += "<h3>package upgrades available</h3>"
+                       for (upgrade in response_content.upgrades) {
+                               info_output += "<b>" + upgrade + "</b>: " + response_content.upgrades[upgrade][1] + " to " + response_content.upgrades[upgrade][0] + "</br>"
+                       }
+               }
+               data.packages = response_content.packages
+               upgrade_info(info_output)
+
+               // directly request image if not in advanced mode
+               if(data.advanced_mode == 1) {
+                       document.getElementById("edit_button").style.display = "block";
+                       document.getElementById("upgrade_button").value = "request image";
+                       document.getElementById("upgrade_button").style.display = "block";
+                       document.getElementById("upgrade_button").disabled = false;
+                       document.getElementById("upgrade_button").onclick = upgrade_request;
+               } else {
+                       upgrade_request();
+               }
+       }
+}
+document.onload = setup()
+</script>
+
+<%+footer%>
diff --git a/applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade b/applications/luci-app-attendedsysupgrade/root/etc/uci-defaults/40_luci-attendedsysupgrade
new file mode 100755 (executable)
index 0000000..832744f
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+
+rm -rf /tmp/luci-indexcache /tmp/luci-modulecache/
+/etc/init.d/uhttpd restart
+
+return 0
diff --git a/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json b/applications/luci-app-attendedsysupgrade/root/usr/share/rpcd/acl.d/attendedsysupgrade.json
new file mode 100644 (file)
index 0000000..85d6e94
--- /dev/null
@@ -0,0 +1,26 @@
+{
+       "attendedsysupgrade": {
+               "description": "attended sysupgrade via rpcd and luci",
+               "read": {
+                       "ubus": {
+                               "attendedsysupgrade": [
+                                       "sysupgrade"
+                               ],
+                               "system": [
+                                       "board"
+                               ],
+                               "uci": [
+                                       "get"
+                               ]
+                       },
+                       "uci": [
+                               "*"
+                       ]
+               },
+               "write": {
+                       "cgi-io": [
+                               "upload"
+                       ]
+               }
+       }
+}
diff --git a/applications/luci-app-bcp38/Makefile b/applications/luci-app-bcp38/Makefile
new file mode 100644 (file)
index 0000000..9ab5a67
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2010 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=BCP38 LuCI interface
+LUCI_DEPENDS:=+luci-mod-admin-full +bcp38
+
+PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-bcp38/luasrc/controller/bcp38.lua b/applications/luci-app-bcp38/luasrc/controller/bcp38.lua
new file mode 100644 (file)
index 0000000..7ea2283
--- /dev/null
@@ -0,0 +1,7 @@
+module("luci.controller.bcp38", package.seeall)
+
+function index()
+       entry({"admin", "network", "firewall", "bcp38"},
+               cbi("bcp38"),
+               _("BCP38"), 50).dependent = false
+end
diff --git a/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua b/applications/luci-app-bcp38/luasrc/model/cbi/bcp38.lua
new file mode 100644 (file)
index 0000000..632074a
--- /dev/null
@@ -0,0 +1,60 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2014 Toke Høiland-Jørgensen <toke@toke.dk>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local wa = require "luci.tools.webadmin"
+local net = require "luci.model.network".init()
+local ifaces = net:get_interfaces()
+
+m = Map("bcp38", translate("BCP38"),
+       translate("This function blocks packets with private address destinations " ..
+               "from going out onto the internet as per " ..
+               "<a href=\"http://tools.ietf.org/html/bcp38\">BCP 38</a>. " ..
+               "For IPv6, only source specific default routes are installed, so " ..
+               "no BCP38 firewall routes are needed."))
+
+s = m:section(TypedSection, "bcp38", translate("BCP38 config"))
+s.anonymous = true
+-- BASIC
+e = s:option(Flag, "enabled", translate("Enable"))
+e.rmempty = false
+
+a = s:option(Flag, "detect_upstream", translate("Auto-detect upstream IP"),
+                               translate("Attempt to automatically detect if the upstream IP " ..
+                                       "will be blocked by the configuration, and add an exception if it will. " ..
+                                       "If this does not work correctly, you can add exceptions manually below."))
+a.rmempty = false
+
+n = s:option(ListValue, "interface", translate("Interface name"), translate("Interface to apply the blocking to " ..
+                                                       "(should be the upstream WAN interface)."))
+for _, iface in ipairs(ifaces) do
+     if iface:is_up() then
+       n:value(iface:name())
+     end
+end
+n.rmempty = false
+
+ma = s:option(DynamicList, "match",
+       translate("Blocked IP ranges"))
+
+ma.datatype = "ip4addr"
+
+nm = s:option(DynamicList, "nomatch",
+       translate("Allowed IP ranges"), translate("Takes precedence over blocked ranges. "..
+                                                 "Use to whitelist your upstream network if you're behind a double NAT " ..
+                                                 "and the auto-detection doesn't work."))
+
+nm.datatype = "ip4addr"
+
+
+return m
diff --git a/applications/luci-app-bcp38/po/sv/bcp38.po b/applications/luci-app-bcp38/po/sv/bcp38.po
new file mode 100644 (file)
index 0000000..7293278
--- /dev/null
@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr "Upptäck automatiskt IP från uppströms"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr "Aktivera"
+
+msgid "Interface name"
+msgstr "Namn på gränssnittet"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
diff --git a/applications/luci-app-bcp38/po/templates/bcp38.pot b/applications/luci-app-bcp38/po/templates/bcp38.pot
new file mode 100644 (file)
index 0000000..1210784
--- /dev/null
@@ -0,0 +1,45 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Allowed IP ranges"
+msgstr ""
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+
+msgid "Auto-detect upstream IP"
+msgstr ""
+
+msgid "BCP38"
+msgstr ""
+
+msgid "BCP38 config"
+msgstr ""
+
+msgid "Blocked IP ranges"
+msgstr ""
+
+msgid "Enable"
+msgstr ""
+
+msgid "Interface name"
+msgstr ""
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr ""
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
diff --git a/applications/luci-app-bcp38/po/zh-cn/bcp38.po b/applications/luci-app-bcp38/po/zh-cn/bcp38.po
new file mode 100644 (file)
index 0000000..45eff98
--- /dev/null
@@ -0,0 +1,52 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr "允许的 IP 范围"
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+"自动检测上游 IP 是否会被当前配置所阻止,当检测到会被阻止时将会添加例外。如果"
+"自动检测无法正常工作,您可以在下面手动添加例外。"
+
+msgid "Auto-detect upstream IP"
+msgstr "自动检测上游 IP"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr "BCP38 配置"
+
+msgid "Blocked IP ranges"
+msgstr "阻止的 IP 范围"
+
+msgid "Enable"
+msgstr "启用"
+
+msgid "Interface name"
+msgstr "接口名称"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr "应用“阻止规则”的接口(应当为上游 WAN 接口)。"
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+"这里的规则优先于阻止规则被使用。如果您在双重 NAT 之后并且自动检测功能不起作"
+"用,请在这里添加您上游网络的白名单。"
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
+"此功能可以阻止具有私有目标地址的数据包通过 <a href=\"http://tools.ietf.org/"
+"html/bcp38\">BCP 38</a> 发送到互联网上。对于 IPv6,仅安装源特定的默认路由,因"
+"此不需要 BCP38 防火墙路由。"
diff --git a/applications/luci-app-bcp38/po/zh-tw/bcp38.po b/applications/luci-app-bcp38/po/zh-tw/bcp38.po
new file mode 100644 (file)
index 0000000..7900cb3
--- /dev/null
@@ -0,0 +1,52 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IP ranges"
+msgstr "允許的 IP 範圍"
+
+msgid ""
+"Attempt to automatically detect if the upstream IP will be blocked by the "
+"configuration, and add an exception if it will. If this does not work "
+"correctly, you can add exceptions manually below."
+msgstr ""
+"自動檢測上游 IP 是否會被當前配置所阻止,當檢測到會被阻止時將會新增例外。如果"
+"自動檢測無法正常工作,您可以在下面手動新增例外。"
+
+msgid "Auto-detect upstream IP"
+msgstr "自動檢測上游 IP"
+
+msgid "BCP38"
+msgstr "BCP38"
+
+msgid "BCP38 config"
+msgstr "BCP38 配置"
+
+msgid "Blocked IP ranges"
+msgstr "阻止的 IP 範圍"
+
+msgid "Enable"
+msgstr "啟用"
+
+msgid "Interface name"
+msgstr "介面名稱"
+
+msgid ""
+"Interface to apply the blocking to (should be the upstream WAN interface)."
+msgstr "應用“阻止規則”的介面(應當為上游 WAN 介面)。"
+
+msgid ""
+"Takes precedence over blocked ranges. Use to whitelist your upstream network "
+"if you're behind a double NAT and the auto-detection doesn't work."
+msgstr ""
+"這裡的規則優先於阻止規則被使用。如果您在雙重 NAT 之後並且自動檢測功能不起作"
+"用,請在這裡新增您上游網路的白名單。"
+
+msgid ""
+"This function blocks packets with private address destinations from going "
+"out onto the internet as per <a href=\"http://tools.ietf.org/html/"
+"bcp38\">BCP 38</a>. For IPv6, only source specific default routes are "
+"installed, so no BCP38 firewall routes are needed."
+msgstr ""
+"此功能可以阻止具有私有目標位址的資料包通過 <a href=\"http://tools.ietf.org/"
+"html/bcp38\">BCP 38</a> 傳送到網際網路上。對於 IPv6,僅安裝源特定的預設路由,因"
+"此不需要 BCP38 防火牆路由。"
diff --git a/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38 b/applications/luci-app-bcp38/root/etc/uci-defaults/60_luci-bcp38
new file mode 100755 (executable)
index 0000000..c204236
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@bcp38[-1]
+       add ucitrack bcp38
+        add_list ucitrack.@bcp38[0].affects=firewall
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/applications/luci-app-clamav/Makefile b/applications/luci-app-clamav/Makefile
new file mode 100644 (file)
index 0000000..f91e692
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=ClamAV LuCI interface
+LUCI_DEPENDS:=+luci-mod-admin-full +clamav
+
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-clamav/luasrc/controller/clamav.lua b/applications/luci-app-clamav/luasrc/controller/clamav.lua
new file mode 100644 (file)
index 0000000..02f3bfc
--- /dev/null
@@ -0,0 +1,22 @@
+--[[
+
+LuCI ClamAV module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+       Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+module("luci.controller.clamav", package.seeall)
+
+function index()
+       entry({"admin", "services", "clamav"}, cbi("clamav"), _("ClamAV"))
+end
diff --git a/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua b/applications/luci-app-clamav/luasrc/model/cbi/clamav.lua
new file mode 100644 (file)
index 0000000..ff98139
--- /dev/null
@@ -0,0 +1,178 @@
+--[[
+
+LuCI ClamAV module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+       Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+require "ubus"
+
+m = Map("clamav", translate("ClamAV"))
+m.on_after_commit = function() luci.sys.call("/etc/init.d/clamav restart") end
+
+s = m:section(TypedSection, "clamav")
+s.anonymous = true
+s.addremove = false
+
+s:tab("tab_advanced", translate("Settings"))
+s:tab("tab_logs", translate("Log"))
+
+--------------- Settings --------------
+
+LogFileMaxSize = s:taboption("tab_advanced", Value, "LogFileMaxSize", translate("Max size of log file"))
+LogFileMaxSize:value("512K",  translate("512K"))
+LogFileMaxSize:value("1M",  translate("1M"))
+LogFileMaxSize:value("2M",  translate("2M"))
+LogFileMaxSize.default = "1M"
+
+LogTime = s:taboption("tab_advanced", ListValue, "LogTime", translate("Log time with each message"))
+LogTime:value("no",  translate("No"))
+LogTime:value("yes",  translate("Yes"))
+LogTime.default = "no"
+
+LogVerbose = s:taboption("tab_advanced", ListValue, "LogVerbose", translate("Enable verbose logging"))
+LogVerbose:value("no",  translate("No"))
+LogVerbose:value("yes",  translate("Yes"))
+LogVerbose.default = "no"
+
+ExtendedDetectionInfo = s:taboption("tab_advanced", ListValue, "ExtendedDetectionInfo", translate("Log additional infection info"))
+ExtendedDetectionInfo:value("no",  translate("No"))
+ExtendedDetectionInfo:value("yes",  translate("Yes"))
+ExtendedDetectionInfo.default = "no"
+
+dummy3 = s:taboption("tab_advanced", DummyValue, "")
+dummy4 = s:taboption("tab_advanced", DummyValue, "")
+
+MaxDirectoryRecursion = s:taboption("tab_advanced", Value, "MaxDirectoryRecursion", translate("Max directory scan depth"))
+MaxDirectoryRecursion:value("15",  translate("15"))
+MaxDirectoryRecursion:value("20",  translate("20"))
+MaxDirectoryRecursion.default = "15"
+
+FollowDirectorySymlink = s:taboption("tab_advanced", ListValue, "FollowDirectorySymlink", translate("Follow directory symlinks"))
+FollowDirectorySymlink:value("no",  translate("No"))
+FollowDirectorySymlink:value("yes",  translate("Yes"))
+FollowDirectorySymlink.default = "no"
+
+FollowFileSymlinks = s:taboption("tab_advanced", ListValue, "FollowFileSymlinks", translate("Follow file symlinks"))
+FollowFileSymlinks:value("no",  translate("No"))
+FollowFileSymlinks:value("yes",  translate("Yes"))
+FollowFileSymlinks.default = "no"
+
+DetectPUA = s:taboption("tab_advanced", ListValue, "DetectPUA", translate("Detect possibly unwanted apps"))
+DetectPUA:value("no",  translate("No"))
+DetectPUA:value("yes",  translate("Yes"))
+DetectPUA.default = "no"
+
+ScanPE = s:taboption("tab_advanced", ListValue, "ScanPE", translate("Scan portable executables"))
+ScanPE:value("no",  translate("No"))
+ScanPE:value("yes",  translate("Yes"))
+ScanPE.default = "yes"
+
+ScanELF = s:taboption("tab_advanced", ListValue, "ScanELF", translate("Scan ELF files"))
+ScanELF:value("no",  translate("No"))
+ScanELF:value("yes",  translate("Yes"))
+ScanELF.default = "yes"
+
+DetectBrokenExecutables = s:taboption("tab_advanced", ListValue, "DetectBrokenExecutables", translate("Detect broken executables"))
+DetectBrokenExecutables:value("no",  translate("No"))
+DetectBrokenExecutables:value("yes",  translate("Yes"))
+DetectBrokenExecutables.default = "no"
+
+ScanOLE2 = s:taboption("tab_advanced", ListValue, "ScanOLE2", translate("Scan MS Office and .msi files"))
+ScanOLE2:value("no",  translate("No"))
+ScanOLE2:value("yes",  translate("Yes"))
+ScanOLE2.default = "yes"
+
+ScanPDF = s:taboption("tab_advanced", ListValue, "ScanPDF", translate("Scan pdf files"))
+ScanPDF:value("no",  translate("No"))
+ScanPDF:value("yes",  translate("Yes"))
+ScanPDF.default = "yes"
+
+ScanSWF = s:taboption("tab_advanced", ListValue, "ScanSWF", translate("Scan swf files"))
+ScanSWF:value("no",  translate("No"))
+ScanSWF:value("yes",  translate("Yes"))
+ScanSWF.default = "yes"
+
+ScanMail = s:taboption("tab_advanced", ListValue, "ScanMail", translate("Scan emails"))
+ScanMail:value("no",  translate("No"))
+ScanMail:value("yes",  translate("Yes"))
+ScanMail.default = "yes"
+
+ScanPartialMessages = s:taboption("tab_advanced", ListValue, "ScanPartialMessages", translate("Scan RFC1341 messages split over many emails"))
+ScanPartialMessages:value("no",  translate("No"))
+ScanPartialMessages:value("yes",  translate("Yes"))
+ScanPartialMessages.default = "no"
+
+ScanArchive = s:taboption("tab_advanced", ListValue, "ScanArchive", translate("Scan archives"))
+ScanArchive:value("no",  translate("No"))
+ScanArchive:value("yes",  translate("Yes"))
+ScanArchive.default = "yes"
+
+ArchiveBlockEncrypted = s:taboption("tab_advanced", ListValue, "ArchiveBlockEncrypted", translate("Block encrypted archives"))
+ArchiveBlockEncrypted:value("no",  translate("No"))
+ArchiveBlockEncrypted:value("yes",  translate("Yes"))
+ArchiveBlockEncrypted.default = "no"
+
+dummy5 = s:taboption("tab_advanced", DummyValue, "")
+dummy6 = s:taboption("tab_advanced", DummyValue, "")
+
+StreamMinPort = s:taboption("tab_advanced", Value, "StreamMinPort", translate("Port range, lowest port"))
+StreamMinPort.datatype = "portrange"
+StreamMinPort:value("1024",translate("1024"))
+StreamMinPort.default = "1024"
+
+StreamMaxPort = s:taboption("tab_advanced", Value, "StreamMaxPort", translate("Port range, highest port"))
+StreamMaxPort.datatype = "portrange"
+StreamMaxPort:value("2048",translate("2048"))
+StreamMaxPort.default = "2048"
+
+MaxThreads = s:taboption("tab_advanced", Value, "MaxThreads", translate("Max number of threads"))
+MaxThreads.datatype = "and(uinteger,min(1))"
+MaxThreads:value("10",translate("10"))
+MaxThreads:value("20",translate("20"))
+MaxThreads.default = "10"
+
+SelfCheck = s:taboption("tab_advanced", Value, "SelfCheck", translate("Database check every N sec"))
+SelfCheck.datatype = "and(uinteger,min(1))"
+SelfCheck:value("600",translate("600"))
+SelfCheck.default = "600"
+
+MaxFileSize = s:taboption("tab_advanced", Value, "MaxFileSize", translate("Max size of scanned file"))
+MaxFileSize.datatype = "string"
+MaxFileSize:value("150M",translate("150M"))
+MaxFileSize:value("50M",translate("50M"))
+MaxFileSize.default = "150M"
+
+------------------ Log --------------------
+
+clamav_logfile = s:taboption("tab_logs", TextValue, "lines", "")
+clamav_logfile.wrap = "off"
+clamav_logfile.rows = 25
+clamav_logfile.rmempty = true
+
+function clamav_logfile.cfgvalue()
+       local uci = require "luci.model.uci".cursor_state()
+       local file = "/tmp/clamd.log"
+       if file then
+               return fs.readfile(file) or ""
+       else
+               return ""
+       end
+end
+
+function clamav_logfile.write()
+end
+
+return m
diff --git a/applications/luci-app-clamav/po/ja/clamav.po b/applications/luci-app-clamav/po/ja/clamav.po
new file mode 100644 (file)
index 0000000..c54c7b1
--- /dev/null
@@ -0,0 +1,130 @@
+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.12\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "暗号化されたアーカイブのブロック"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "データベース チェック間隔(秒)"
+
+msgid "Detect broken executables"
+msgstr "破損した実行ファイルの検出"
+
+msgid "Detect possibly unwanted apps"
+msgstr "不必要と思われるアプリケーションの検出"
+
+msgid "Enable verbose logging"
+msgstr "詳細なログの有効化"
+
+msgid "Follow directory symlinks"
+msgstr "ディレクトリ シンボリックリンクに従う"
+
+msgid "Follow file symlinks"
+msgstr "ファイル シンボリックリンクに従う"
+
+msgid "Log"
+msgstr "ログ"
+
+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 "スレッドの最大数"
+
+msgid "Max size of log file"
+msgstr "ログの最大サイズ"
+
+msgid "Max size of scanned file"
+msgstr ""
+
+msgid "No"
+msgstr "いいえ"
+
+msgid "Port range, highest port"
+msgstr "ポート範囲(上限)"
+
+msgid "Port range, lowest port"
+msgstr "ポート範囲(下限)"
+
+msgid "Scan ELF files"
+msgstr "ELF ファイルのスキャン"
+
+msgid "Scan MS Office and .msi files"
+msgstr "MS Office と .msi ファイルのスキャン"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr ""
+
+msgid "Scan archives"
+msgstr "アーカイブのスキャン"
+
+msgid "Scan emails"
+msgstr "E-mailのスキャン"
+
+msgid "Scan pdf files"
+msgstr "PDF ファイルのスキャン"
+
+msgid "Scan portable executables"
+msgstr "ポータブル 実行ファイルのスキャン"
+
+msgid "Scan swf files"
+msgstr "SWF ファイルのスキャン"
+
+msgid "Settings"
+msgstr "設定"
+
+msgid "Yes"
+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..a6c9837
--- /dev/null
@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "Blockera krypterade arkiv"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "Kontrollera databasen var N sek"
+
+msgid "Detect broken executables"
+msgstr "Upptäck trasiga exekverbara filer"
+
+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 "Följ mappens symbollänkar"
+
+msgid "Follow file symlinks"
+msgstr "Följ symbollänkar för fil"
+
+msgid "Log"
+msgstr "Logg"
+
+msgid "Log additional infection info"
+msgstr "Logga ytterligare information om infektionen"
+
+msgid "Log time with each message"
+msgstr "Loggtid med varje meddelande"
+
+msgid "Max directory scan depth"
+msgstr ""
+
+msgid "Max number of threads"
+msgstr "Maximalt antalet trådar"
+
+msgid "Max size of log file"
+msgstr "Högsta storlek av loggfilen"
+
+msgid "Max size of scanned file"
+msgstr "Högsta storlek av skannad fil"
+
+msgid "No"
+msgstr "Nej"
+
+msgid "Port range, highest port"
+msgstr "Räckvidd för port, högsta port"
+
+msgid "Port range, lowest port"
+msgstr "Räckvidd för port, lägsta port"
+
+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 "Sök igenom bärbara exekverbara filer"
+
+msgid "Scan swf files"
+msgstr "Sök igenom swf-filer"
+
+msgid "Settings"
+msgstr "Inställningar"
+
+msgid "Yes"
+msgstr "Ja"
diff --git a/applications/luci-app-clamav/po/templates/clamav.pot b/applications/luci-app-clamav/po/templates/clamav.pot
new file mode 100644 (file)
index 0000000..768f730
--- /dev/null
@@ -0,0 +1,119 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "10"
+msgstr ""
+
+msgid "1024"
+msgstr ""
+
+msgid "15"
+msgstr ""
+
+msgid "150M"
+msgstr ""
+
+msgid "1M"
+msgstr ""
+
+msgid "20"
+msgstr ""
+
+msgid "2048"
+msgstr ""
+
+msgid "2M"
+msgstr ""
+
+msgid "50M"
+msgstr ""
+
+msgid "512K"
+msgstr ""
+
+msgid "600"
+msgstr ""
+
+msgid "Block encrypted archives"
+msgstr ""
+
+msgid "ClamAV"
+msgstr ""
+
+msgid "Database check every N sec"
+msgstr ""
+
+msgid "Detect broken executables"
+msgstr ""
+
+msgid "Detect possibly unwanted apps"
+msgstr ""
+
+msgid "Enable verbose logging"
+msgstr ""
+
+msgid "Follow directory symlinks"
+msgstr ""
+
+msgid "Follow file symlinks"
+msgstr ""
+
+msgid "Log"
+msgstr ""
+
+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 ""
+
+msgid "Max size of log file"
+msgstr ""
+
+msgid "Max size of scanned file"
+msgstr ""
+
+msgid "No"
+msgstr ""
+
+msgid "Port range, highest port"
+msgstr ""
+
+msgid "Port range, lowest port"
+msgstr ""
+
+msgid "Scan ELF files"
+msgstr ""
+
+msgid "Scan MS Office and .msi files"
+msgstr ""
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr ""
+
+msgid "Scan archives"
+msgstr ""
+
+msgid "Scan emails"
+msgstr ""
+
+msgid "Scan pdf files"
+msgstr ""
+
+msgid "Scan portable executables"
+msgstr ""
+
+msgid "Scan swf files"
+msgstr ""
+
+msgid "Settings"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
diff --git a/applications/luci-app-clamav/po/zh-cn/clamav.po b/applications/luci-app-clamav/po/zh-cn/clamav.po
new file mode 100644 (file)
index 0000000..6a2c5df
--- /dev/null
@@ -0,0 +1,131 @@
+# liushuyu <liushuyu_011@163.com>, 2017.
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2017-04-15 21:37-0600\n"
+"Language-Team: Chinese <kde-i18n-doc@kde.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 2.0.1\n"
+"Last-Translator: liushuyu <liushuyu011@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: zh_CN\n"
+
+msgid "10"
+msgstr "10"
+
+msgid "1024"
+msgstr "1024"
+
+msgid "15"
+msgstr "15"
+
+msgid "150M"
+msgstr "150M"
+
+msgid "1M"
+msgstr "1M"
+
+msgid "20"
+msgstr "20"
+
+msgid "2048"
+msgstr "2048"
+
+msgid "2M"
+msgstr "2M"
+
+msgid "50M"
+msgstr "50M"
+
+msgid "512K"
+msgstr "512K"
+
+msgid "600"
+msgstr "600"
+
+msgid "Block encrypted archives"
+msgstr "拦截加密的归档文件"
+
+msgid "ClamAV"
+msgstr "ClamAV"
+
+msgid "Database check every N sec"
+msgstr "每 N 秒检测一次数据库"
+
+msgid "Detect broken executables"
+msgstr "检测破损的可执行文件"
+
+msgid "Detect possibly unwanted apps"
+msgstr "检测不受欢迎的软件"
+
+msgid "Enable verbose logging"
+msgstr "启用详细日志输出"
+
+msgid "Follow directory symlinks"
+msgstr "跟随目录符号链接"
+
+msgid "Follow file symlinks"
+msgstr "跟随文件符号链接"
+
+msgid "Log"
+msgstr "日志"
+
+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 "最大线程数"
+
+msgid "Max size of log file"
+msgstr "最大日志大小"
+
+msgid "Max size of scanned file"
+msgstr "最大可扫描的文件大小"
+
+msgid "No"
+msgstr "否"
+
+msgid "Port range, highest port"
+msgstr "端口范围,最大端口"
+
+msgid "Port range, lowest port"
+msgstr "端口范围,最小端口"
+
+msgid "Scan ELF files"
+msgstr "扫描 ELF 文件"
+
+msgid "Scan MS Office and .msi files"
+msgstr "扫描 MS Office 文档和 .msi 安装包文件"
+
+msgid "Scan RFC1341 messages split over many emails"
+msgstr "扫描符合 RFC1341 邮件分离规范的邮件"
+
+msgid "Scan archives"
+msgstr "扫描归档文件"
+
+msgid "Scan emails"
+msgstr "扫描电子邮件"
+
+msgid "Scan pdf files"
+msgstr "扫描 PDF 文件"
+
+msgid "Scan portable executables"
+msgstr "扫描 PE (Windows) 可执行文件"
+
+msgid "Scan swf files"
+msgstr "扫描 SWF 文件"
+
+msgid "Settings"
+msgstr "设置"
+
+msgid "Yes"
+msgstr "是"
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 f6bee73..4d04bff 100644 (file)
@@ -1,15 +1,16 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-03-15 22:02+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-02-20 17:39-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"POT-Creation-Date: \n"
 
 msgid "A short textual description of the configured command"
 msgstr "Uma pequena descrição textual do comando configurado"
@@ -40,10 +41,10 @@ msgid "Command"
 msgstr "Comando"
 
 msgid "Command executed successfully."
-msgstr ""
+msgstr "O comando executou com sucesso."
 
 msgid "Command exited with status code"
-msgstr ""
+msgstr "O comando encerrou com um estado de erro"
 
 msgid "Command failed"
 msgstr "O comando falhou"
@@ -76,7 +77,7 @@ msgid "Download"
 msgstr "Baixar"
 
 msgid "Download execution result"
-msgstr ""
+msgstr "Baixar os resultados da execução"
 
 msgid "Failed to execute command!"
 msgstr "Falha ao executar comando!"
@@ -88,7 +89,7 @@ msgid "Loading"
 msgstr "Carregando"
 
 msgid "Or display result"
-msgstr ""
+msgstr "Ou mostre o resultado"
 
 msgid "Public access"
 msgstr "Acesso público"
@@ -97,10 +98,10 @@ msgid "Run"
 msgstr "Executar"
 
 msgid "Standard Error"
-msgstr ""
+msgstr "Saída de Erro"
 
 msgid "Standard Output"
-msgstr ""
+msgstr "Saída Padrão"
 
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
index 5a4c255..a944fdb 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..."
index f1f4525..157c076 100644 (file)
@@ -103,7 +103,7 @@ msgstr ""
 msgid ""
 "This page allows you to configure custom shell commands which can be easily "
 "invoked from the web interface."
-msgstr "只要可以從web介輕易調用, 這頁面允許自定shell指令."
+msgstr "只要可以從web介輕易調用, 這頁面允許自定shell指令."
 
 msgid "Waiting for command to complete..."
 msgstr "等待完整命令中..."
index 8695ce5..751b921 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2014-04-28 06:16+0200\n"
-"Last-Translator: Umeaboy <kristoffer.grundstrom1983@gmail.com>\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
diff --git a/applications/luci-app-cshark/Makefile b/applications/luci-app-cshark/Makefile
new file mode 100644 (file)
index 0000000..40b0e9f
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Cloudshark capture tool Web UI
+LUCI_DEPENDS:=+cshark
+LUCI_PKGARCH:=all
+
+PKG_MAINTAINER:=Luka Perkov <luka@openwrt.org>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-cshark/luasrc/controller/cshark.lua b/applications/luci-app-cshark/luasrc/controller/cshark.lua
new file mode 100644 (file)
index 0000000..4d9bbba
--- /dev/null
@@ -0,0 +1,125 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+]]--
+
+module("luci.controller.cshark", package.seeall)
+
+function index()
+               page = node("admin", "network", "cloudshark")
+               page.target = cbi("admin_network/cshark")
+               page.title = _("CloudShark")
+               page.order = 70
+
+               page = entry({"admin", "network", "cshark_iface_dump_start"}, call("cshark_iface_dump_start"), nil)
+               page.leaf = true
+
+               page = entry({"admin", "network", "cshark_iface_dump_stop"}, call("cshark_iface_dump_stop"), nil)
+               page.leaf = true
+
+               page = entry({"admin", "network", "cshark_check_status"}, call("cshark_check_status"), nil)
+               page.leaf = true
+
+               page = entry({"admin", "network", "cshark_link_list_get"}, call("cshark_link_list_get"), nil)
+               page.leaf = true
+
+               page = entry({"admin", "network", "cshark_link_list_clear"}, call("cshark_link_list_clear"), nil)
+               page.leaf = true
+end
+
+function cshark_iface_dump_start(ifname, value, flag, filter)
+       if ifname == nil or ifname == '' then
+               ifname = 'any'
+       end
+       if tonumber(value) == nil
+       then
+               value = '0'
+       end
+       if filter == nil or filter == '' then
+               filter = ''
+       end
+
+       if flag == nil or flag == '' then
+               filter = 'T'
+       end
+
+       luci.http.prepare_content("text/plain")
+
+       local res = os.execute("(/sbin/cshark -i " .. ifname .. " -" .. flag .. " " .. value .. " -p /tmp/cshark-luci.pid " .. filter .. " > /tmp/cshark-luci.out 2>&1) &")
+       luci.http.write(tostring(res))
+end
+
+function cshark_iface_dump_stop()
+       luci.http.prepare_content("text/plain")
+
+       local f = io.open("/tmp/cshark-luci.pid", "rb")
+       local pid = f:read("*all")
+       io.close(f)
+
+       local res = os.execute("kill -TERM " .. pid)
+       luci.http.write(tostring(res))
+end
+
+function cshark_check_status()
+
+       local msg = "";
+       local status;
+       local f = io.open("/tmp/cshark-luci.pid","r")
+       if f ~= nil then
+               status = 1;
+               io.close(f)
+       else
+               status = 0;
+       end
+
+       f = io.open("/tmp/cshark-luci.out","r")
+       if f ~= nil then
+               msg = f:read("*all")
+               io.close(f)
+               if msg ~= '' then
+                       os.remove('/tmp/cshark-luci.out')
+               end
+       end
+
+       luci.http.prepare_content("application/json")
+
+       local res = {}
+       res["status"] = status;
+       res["msg"] = msg;
+
+       luci.http.write_json(res)
+end
+
+function cshark_link_list_get()
+       local uci = require("uci").cursor()
+
+       luci.http.prepare_content("application/json")
+
+       luci.http.write("[")
+
+       local t = uci:get("cshark", "cshark", "entry")
+  if (t ~= nil) then
+         for i = #t, 1, -1 do
+                 luci.http.write("[\"" .. t[i] .. "\"],")
+         end
+  end
+
+       luci.http.write("[]]")
+end
+
+function cshark_link_list_clear()
+       local uci = require("uci").cursor()
+
+       uci:delete("cshark", "cshark", "entry")
+       uci:commit("cshark");
+
+       luci.http.status(200, "OK")
+end
diff --git a/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua b/applications/luci-app-cshark/luasrc/model/cbi/admin_network/cshark.lua
new file mode 100644 (file)
index 0000000..8db9559
--- /dev/null
@@ -0,0 +1,30 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local fs = require "nixio.fs"
+
+m = Map("cshark", translate("CloudShark"))
+
+if fs.access("/etc/config/cshark") then
+       m:section(SimpleSection).template = "cshark"
+
+       s = m:section(TypedSection, "cshark", translate("Options"))
+       s.anonymous = true
+       s.addremove = false
+
+       s:option(Value, "url", translate("CloudShark URL"))
+       s:option(Value, "token", translate("CloudShark API token"))
+end
+
+return m
diff --git a/applications/luci-app-cshark/luasrc/view/cshark.htm b/applications/luci-app-cshark/luasrc/view/cshark.htm
new file mode 100644 (file)
index 0000000..bc67f80
--- /dev/null
@@ -0,0 +1,291 @@
+<%#
+LuCI - Lua Configuration Interface
+
+Copyright (C) 2014, QA Cafe, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+
+-%>
+
+<fieldset class="cbi-section">
+       <legend><%:Start network capture%></legend>
+       <div class="cbi-section-node">
+               <table class="cbi-section-table">
+                       <tr>
+                               <th><%:Interface%></th>
+                               <th colspan='2'><%:seconds, packets, bytes%></th>
+                               <th><%:Filter%></th>
+                               <th><%:Actions%></th>
+                       </tr>
+                       <tr>
+                               <td>
+                                       <select title="<%:Interface%>" style="width:auto" id="s_interfaces">
+                                       <%
+                                               local nixio = require "nixio"
+                                               for k, v in ipairs(nixio.getifaddrs()) do
+                                                       if v.family == "packet" then
+                                                       %>
+                                                               <option value="<%=v.name%>"><%=v.name%> </option>
+                                                       <%
+                                                       end
+                                               end
+                                       %>
+                                               <option value="any"><%:any%></option>
+                                       </select>
+                               </td>
+                               <td colspan='2'>
+                                       <input id="tx_value" type="text" value="0" />
+                                       <select title="<%:timeout, bytes, seconds%>" id="s_value_type" style="width:auto">
+                                               <option value="T"><%:seconds%></option>
+                                               <option value="P"><%:packets%></option>
+                                               <option value="S"><%:bytes%></option>
+                                       </select>
+                               </td>
+                               <td>
+                                       <input style="margin: 5px 0" type="text" title="<%:Filter%>" placeholder="filter" id="i_filter" />
+                               </td>
+                               <td>
+                                       <input type="button" id="bt_action" data-action="start" value="<%:Start capture%>" class="cbi-button" />
+                               </td>
+                       </tr>
+               </table>
+       </div>
+</fieldset>
+
+<fieldset class="cbi-section">
+       <span id="cshark-rc-output"></span>
+</fieldset>
+
+<hr/>
+
+<fieldset class="cbi-section">
+       <legend><%:Capture links%></legend>
+       <div class="cbi-section-node">
+               <table id="t_link_list" class="cbi-section-table">
+                       <tr class="cbi-section-table-titles">
+                               <th class="cbi-section-table-cell"><%:Capture URL%></th>
+                               <th class="cbi-section-table-cell"><%:Capture time%></th>
+                       </tr>
+               </table>
+       </div>
+</fieldset>
+
+<fieldset class="cbi-section">
+  <a href="https://support.cloudshark.org/openwrt/openwrt-cloudshark.html" target="_blank">Visit support.cloudshark.org for help.</a>
+</fieldset>
+
+<hr/>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+       var capture_running = 0;
+       var pid_file = 0;
+       var bt_action = document.getElementById('bt_action');
+       var a_clear_links = document.getElementById('a_clear_links');
+       var output = document.getElementById('cshark-rc-output');
+       var loader = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> ';
+       var msg = { 'start' : '<%:Waiting for capture to complete...%>', 'stop' : '<%:Waiting for upload to complete...%>' };
+       var status_msg = msg['start'];
+
+       function get_date(timestamp)
+       {
+               function pad_str(str)
+               {
+                       return (str < 10) ? "0" + str : str;
+               }
+
+               var current_date = new Date(timestamp * 1000);
+               return current_date.getFullYear() + "-" +
+                               pad_str(current_date.getMonth() + 1) + "-" +
+                               pad_str(current_date.getDate()) + " " +
+                               pad_str(current_date.getHours()) + ":" +
+                               pad_str(current_date.getMinutes()) + ":" +
+                               pad_str(current_date.getSeconds());
+       }
+
+       bt_action.onclick = function()
+       {
+               var action = this.getAttribute("data-action");
+               var csxhr = new XHR();
+
+               if (action == "stop")
+               {
+                       update_status(action);
+
+                       bt_action.disabled = true;
+
+                       csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_stop', null,
+                       function(x)
+                       {
+                               if (!x || x.responseText.trim() != "0")
+                               {
+                                       update_status("failed", "Invalid response on stop.");
+                               }
+                       });
+
+               }
+               else if (action == "start")
+               {
+
+                       var s_interfaces = document.getElementById('s_interfaces');
+                       var s_value_type = document.getElementById('s_value_type');
+                       var i_filter = document.getElementById('i_filter');
+
+                       var if_n = s_interfaces.selectedIndex;
+                       var t_n = s_value_type.selectedIndex;
+                       var ifname = s_interfaces.options[if_n].value.trim();
+                       var filter_val = i_filter.value.trim();
+                       var tx_val = document.getElementById('tx_value').value.trim();
+                       var type_val = s_value_type.options[t_n].value.trim();
+
+                       if (type_val != 'P' && type_val != 'T' && type_val != 'S') type_val = 'T';
+
+                       if (!ifname || !type_val) return;
+
+                       if (isNaN(tx_val)) return alert("<%:value for [seconds, packets, bytes] must be Integer%>");
+
+                       update_status(action);
+
+                       csxhr.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_iface_dump_start/' + ifname + '/' + tx_val + '/' + type_val + '/'+ filter_val, null,
+                       function(x)
+                       {
+                               if (!x)
+                                       update_status("failed", "Invalid response on start.");
+                               else
+                                       update_status("running");
+                       });
+               }
+       }
+
+       function update_status(status, message)
+       {
+               switch (status)
+               {
+                       case 'start':
+                       case 'stop':
+                               status_msg = msg[status];
+                               output.innerHTML = loader + status_msg;
+                       break
+
+                       case 'running':
+                               if (capture_running) break;;
+
+                               output.innerHTML = loader + status_msg;
+
+                               bt_action.value = '<%:Stop capture%>';
+                               bt_action.setAttribute('data-action', 'stop');
+                               capture_running = 1;
+                       break;
+
+                       case 'completed':
+                       case 'failed':
+                               if (!capture_running) break;
+
+                               if (status == "completed")
+                               {
+                                       link_list_update();
+                               }
+
+                               output.innerHTML = "<pre>" + message + "</pre>";
+                               bt_action.value = '<%:Start capture%>';
+                               bt_action.setAttribute('data-action', 'start');
+                               bt_action.disabled = false;
+                               capture_running = 0;
+                       break;
+               }
+       }
+
+
+       function check_status()
+       {
+
+               XHR.poll(3, '<%=luci.dispatcher.build_url("admin", "network")%>/cshark_check_status', null,
+               function(x, data)
+               {
+                       if (!x)
+                       {
+                               if (capture_running)
+                                       update_status("failed", "Invalid response when fetching status.");
+
+                               return;
+                       }
+                       console.log(data)
+
+                       update_status( (data.status == 1) && "running" || "completed", data.msg);
+               })
+       }
+
+       function link_list_clear()
+       {
+               var csxhr_del = new XHR();
+               csxhr_del.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_clear', null,
+               function(x)
+               {
+                       if (!x)
+                               return false;
+
+                       link_list_update();
+               });
+       }
+
+
+       function link_list_update()
+       {
+               var t_link = document.getElementById("t_link_list");
+               if (!t_link) return;
+
+               var row_count = t_link.rows.length;
+               while(--row_count) t_link.deleteRow(row_count);
+
+               var cell = t_link.insertRow(-1).insertCell(0);
+               cell.colSpan = 2;
+               cell.innerHTML = loader;
+
+               var csxhr_link = new XHR();
+               csxhr_link.get('<%=luci.dispatcher.build_url("admin", "network")%>/cshark_link_list_get', null,
+               function(x, entries)
+               {
+                       var row = t_link.deleteRow(1);
+
+                       if (!x) return;
+
+                       if (!entries || !entries.length)
+                       {
+                               var cell = t_link.insertRow(-1).insertCell(0);
+                               cell.colSpan = 2;
+                               cell.innerHTML = '<em><br />There are no captures available yet.</em>';
+
+                               return;
+                       }
+
+                       for (var i = 0, len = entries.length; i < len ; i++)
+                       {
+                               var entry = entries[i][0];
+                               if (!entry) continue;
+
+                               var data = entry.split(",");
+                               var url = data[0];
+                               var timestamp = data[1];
+
+                               var row = t_link.insertRow(-1);
+                               row.insertCell(0).innerHTML = '<a href="'+url+'" target="_blank">'+url+'</a>';
+                               row.insertCell(1).innerHTML = get_date(timestamp);
+                       }
+
+                       var cell = t_link.insertRow(-1).insertCell(0);
+                       cell.colSpan = 2;
+                       cell.style.textAlign="center";
+                       cell.innerHTML = '<input type="button" onclick="link_list_clear()" class="cbi-button" value ="<%:Clear list%>" />';
+               })
+       }
+
+       check_status();
+       link_list_update();
+//]]></script>
index 88c905a..69f9880 100644 (file)
@@ -2,7 +2,7 @@
 # Copyright 2008 Steven Barth <steven@midlink.org>
 # Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 # Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
-# Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 #
 # This is free software, licensed under the Apache License, Version 2.0
 
@@ -16,7 +16,7 @@ PKG_VERSION:=2.4.8
 
 # 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>
index 63bb8bf..1dfa625 100755 (executable)
@@ -1,7 +1,7 @@
 -- Copyright 2008 Steven Barth <steven@midlink.org>
 -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
 -- Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
--- Copyright 2014-2016 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+-- Copyright 2014-2017 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
 -- Licensed to the public under the Apache License 2.0.
 
 module("luci.controller.ddns", package.seeall)
@@ -24,7 +24,7 @@ local srv_ver_min = "2.7.6"                   -- minimum version of service required
 local srv_ver_cmd = luci_helper .. [[ -V | awk {'print $2'}]]
 local app_name    = "luci-app-ddns"
 local app_title   = "Dynamic DNS"
-local app_version = "2.4.8-1"
+local app_version = "2.4.8-2"
 
 function index()
        local nxfs      = require "nixio.fs"            -- global definitions not available
@@ -180,12 +180,10 @@ local function _get_status()
                end
 
                -- get/set monitored interface and IP version
-               local iface     = s["interface"] or "_nonet_"
+               local iface     = s["interface"] or "wan"
                local use_ipv6  = tonumber(s["use_ipv6"]) or 0
-               if iface ~= "_nonet_" then
-                       local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
-                       iface = ipv .. " / " .. iface
-               end
+               local ipv = (use_ipv6 == 1) and "IPv6" or "IPv4"
+               iface = ipv .. " / " .. iface
 
                -- try to get registered IP
                local lookup_host = s["lookup_host"] or "_nolookup_"
index f59d053..4b8d2f8 100644 (file)
@@ -2,8 +2,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2013-02-03 13:53+0200\n"
-"Last-Translator: Francesco <3gasas@gmail.com>\n"
+"PO-Revision-Date: 2017-09-06 01:53+0200\n"
+"Last-Translator: Bubu83 <bubu83@gmail.com>\n"
 "Language-Team: \n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -22,160 +22,182 @@ msgid "-- default --"
 msgstr ""
 
 msgid "Advanced Settings"
-msgstr ""
+msgstr "Opzioni Avanzate"
 
 msgid "Allow non-public IP's"
-msgstr ""
+msgstr "Consenti IP non pubblici"
 
 msgid "Applying changes"
-msgstr ""
+msgstr "Applico i cambiamenti"
 
 msgid "Basic Settings"
-msgstr ""
+msgstr "Opzioni di Base"
 
 msgid ""
 "Below a list of configuration tips for your system to run Dynamic DNS "
 "updates without limitations"
 msgstr ""
+"Sotto c'è una lista di consigli di configurazione per il tuo sistema per eseguire "
+"aggiornamenti di Dynamic DNS senza limitazioni"
 
 msgid ""
 "Below is a list of configured DDNS configurations and their current state."
 msgstr ""
+"Sotto c'è una lista delle configurazioni DDNS configurate e il loro stato attuale."
 
 msgid "Bind Network"
-msgstr ""
+msgstr "Collega Rete"
 
 msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "Collegamento a una specifica rete non supportato"
 
 msgid ""
 "BusyBox's nslookup and Wget do not support to specify the IP version to use "
 "for communication with DDNS Provider!"
 msgstr ""
+"Nslookup di BusyBox e Wget non supportano lo specificare la versione IP da usare "
+"per la comunicazione con il Provider DDNS!"
 
 msgid ""
 "BusyBox's nslookup and hostip do not support to specify to use TCP instead "
 "of default UDP when requesting DNS server!"
 msgstr ""
+"Nslookup di BusyBox e hostip non supportano lo specificare l'uso di TCP invece "
+"di UDP di default quando richiedono il server DNS!"
 
 msgid ""
 "BusyBox's nslookup in the current compiled version does not handle given DNS "
 "Servers correctly!"
 msgstr ""
+"Nslookup di BusyBox nella versione compilata corrente non gestisce i dati Server "
+"DNS correttamente!"
 
 msgid "Casual users should not change this setting"
-msgstr ""
+msgstr "Gli utenti casuali non dovrebbero cambiare questa opzione"
 
 msgid "Change provider"
-msgstr ""
+msgstr "Cambia provider"
 
 msgid "Check Interval"
-msgstr ""
+msgstr "Controlla Intervallo"
 
 msgid "Collecting data..."
-msgstr ""
+msgstr "Raccogliendo dati..."
 
 msgid "Config error"
-msgstr ""
+msgstr "Errore di configurazione"
 
 msgid "Configuration"
-msgstr ""
+msgstr "Configurazione"
 
 msgid ""
 "Configure here the details for all Dynamic DNS services including this LuCI "
 "application."
 msgstr ""
+"Configura qui i dettagli per tutti i servizi Dynamic DNS inclusa questa "
+"applicazione LuCI."
 
 msgid "Configure here the details for selected Dynamic DNS service."
-msgstr ""
+msgstr "Configura qui i dettagli per il servizio Dynamic DNS selezionato."
 
 msgid "Current setting"
-msgstr ""
+msgstr "Impostazione corrente"
 
 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 ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia.  <br />Questo è di default se esegui gli script DDNS per conto tuo "
+" (es. usando cron con force_interval impostato a '0')"
 
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">You can start/stop each configuration here. It will run until next reboot."
 msgstr ""
+"Attualmente gli aggiornamenti DDNS non si avviano al boot o per eventi "
+"dell'interfaccia. <br />Puoi avviare/fermare ogni configurazione qui. Verrà eseguita "
+"fino al prossimo riavvio."
 
 msgid "Custom update script to be used for updating your DDNS Provider."
-msgstr ""
+msgstr "Script aggiornamento personalizzato da usare per aggiornare il tuo DDNS Provider."
 
 msgid "Custom update-URL"
 msgstr "URL di aggiornamento personalizzato"
 
 msgid "Custom update-script"
-msgstr ""
+msgstr "Script di aggiornamento personalizzato"
 
 msgid "DDNS Autostart disabled"
-msgstr ""
+msgstr "Autoavvio DDNS disabilitato"
 
 msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "Configurazione Cliente DDNS"
 
 msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "Documentazione Cliente DDNS"
 
 msgid "DDNS Service provider"
-msgstr ""
+msgstr "Provider del Servizio DDNS"
 
 msgid "DNS requests via TCP not supported"
-msgstr ""
+msgstr "Richieste DNS via TCP non supportate"
 
 msgid "DNS-Server"
-msgstr ""
+msgstr "Server DNS"
 
 msgid "Date format"
-msgstr ""
+msgstr "Formato Data"
 
 msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv4 dei sistemi"
 
 msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la pagina WEB che legge l'indirizzo IPv6 dei sistemi"
 
 msgid "Defines the interface to read systems IP-Address from"
-msgstr ""
+msgstr "Definisce l'interfaccia che legge l'indirizzo IP dei sistemi"
 
 msgid "Defines the network to read systems IPv4-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv4 dei sistemi"
 
 msgid "Defines the network to read systems IPv6-Address from"
-msgstr ""
+msgstr "Definisce la rete che legge l'indirizzo IPv6 dei sistemi"
 
 msgid ""
 "Defines the source to read systems IPv4-Address from, that will be send to "
 "the DDNS provider"
 msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv4 dei sistemi, che sarà mandata "
+"al provider DDNS"
 
 msgid ""
 "Defines the source to read systems IPv6-Address from, that will be send to "
 "the DDNS provider"
 msgstr ""
+"Definisce la sorgente che legge l'indirizzo IPv6 dei sistemi, che sarà mandata "
+"al provider DDNS"
 
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr ""
+msgstr "Definisce quale indirizzo IP 'IPv4/IPv6' è mandato al provider DDNS"
 
 msgid "Details for"
-msgstr ""
+msgstr "Dettagli per"
 
 msgid "Directory contains Log files for each running section"
-msgstr ""
+msgstr "Directory che contiene i file di registro per ogni sezione avviata"
 
 msgid ""
 "Directory contains PID and other status information for each running section"
 msgstr ""
+"Directory che contiene il PID e altre informazioni di stato per ogni seziona avviata"
 
 msgid "Disabled"
-msgstr ""
+msgstr "Disabilitato"
 
 msgid "Domain"
-msgstr ""
+msgstr "Dominio"
 
 msgid "Dynamic DNS"
 msgstr "DNS Dinamico"
@@ -188,124 +210,136 @@ msgstr ""
 "statico anche nel caso in cui tu disponga di un indirizzo IP dinamico."
 
 msgid "Enable secure communication with DDNS provider"
-msgstr ""
+msgstr "Abilita la comunicazione sicura con il provider DDNS"
 
 msgid "Enabled"
-msgstr ""
+msgstr "Abilitato"
 
 msgid "Error"
-msgstr ""
+msgstr "Errore"
 
 msgid "Error Retry Counter"
-msgstr ""
+msgstr "Conteggio errore di riprova"
 
 msgid "Error Retry Interval"
-msgstr ""
+msgstr "Intervallo errore di riprova"
 
 msgid "Event Network"
-msgstr ""
+msgstr "Network Evento"
 
 msgid "File"
 msgstr ""
 
 msgid "File not found"
-msgstr ""
+msgstr "File non trovato"
 
 msgid "File not found or empty"
-msgstr ""
+msgstr "File non trovato o vuoto"
 
 msgid ""
 "Follow this link<br />You will find more hints to optimize your system to "
 "run DDNS scripts with all options"
 msgstr ""
+"Segui questo collegamento<br />Troverai più aiuti per ottimizzare il tuo sistema "
+"a eseguire script DDNS con tutte le opzioni"
 
 msgid "For detailed information about parameter settings look here."
-msgstr ""
+msgstr "Per informazioni dettagliate sui parametri opzionali guarda qui."
 
 msgid "For supported codes look here"
-msgstr ""
+msgstr "Per i codici supportati guarda qui"
 
 msgid "Force IP Version"
-msgstr ""
+msgstr "Forza Versione IP"
 
 msgid "Force IP Version not supported"
-msgstr ""
+msgstr "Forza Versione IP non supportato"
 
 msgid "Force Interval"
-msgstr ""
+msgstr "Forza Intervallo"
 
 msgid "Force TCP on DNS"
-msgstr ""
+msgstr "Forza TCP su DNS"
 
 msgid "Forced IP Version don't matched"
-msgstr ""
+msgstr "La Versione IP forzata non corrisponde"
 
 msgid "Format"
-msgstr ""
+msgstr "Formato"
 
 msgid "Format: IP or FQDN"
-msgstr ""
+msgstr "Formato: IP o FQDN"
 
 msgid ""
 "GNU Wget will use the IP of given network, cURL will use the physical "
 "interface."
 msgstr ""
+"GNU Wget userà l'IP della rete data, cURL userà l'interfaccia "
+"fisica."
 
 msgid "Global Settings"
-msgstr ""
+msgstr "Opzioni Globali"
 
 msgid "HTTPS not supported"
-msgstr ""
+msgstr "HTTPS non supportato"
 
 msgid "Hints"
-msgstr ""
+msgstr "Suggerimenti"
 
 msgid "Hostname/FQDN to validate, if IP update happen or necessary"
-msgstr ""
+msgstr "Indirizzo/FQDN da validare, se l'aggiornamento IP avviene o è necessario"
 
 msgid "IP address source"
-msgstr ""
+msgstr "Sorgente indirizzo IP"
 
 msgid "IP address version"
-msgstr ""
+msgstr "Versione indirizzo IP"
 
 msgid "IPv4-Address"
-msgstr ""
+msgstr "Indirizzo IPv4"
 
 msgid "IPv6 address must be given in square brackets"
-msgstr ""
+msgstr "Indirizzo IPv6 deve essere dato con le parentesi quadre"
 
 msgid ""
 "IPv6 is currently not (fully) supported by this system<br />Please follow "
 "the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
 "your system to the latest OpenWrt Release"
 msgstr ""
+"IPv6 non è (pienamente) supportato da questo sistema<br />Per favore segui "
+"le istruzioni sul sito di OpenWrt per abilitare il supporto a IPv6<br />o aggiorna "
+"il tuo sistema all'ultima Release di OpenWrt"
 
 msgid "IPv6 not supported"
-msgstr ""
+msgstr "IPv6 non supportato"
 
 msgid "IPv6-Address"
-msgstr ""
+msgstr "Indirizzo IPv6"
 
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr ""
+msgstr "Se sia cURL e sia GNU Wget sono installati, Wget è usato di default."
 
 msgid ""
 "If this service section is disabled it could not be started.<br />Neither "
 "from LuCI interface nor from console"
 msgstr ""
+"Se questa sezione del servizio è disabilitata, non può essere avviata<br />Nè "
+"da interfaccia LuCI nè da console"
 
 msgid "If using secure communication you should verify server certificates!"
-msgstr ""
+msgstr "Se usi la comunicazione sicura dovresti verificare i certificati del server!"
 
 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 ""
+"Se vuoi mandare aggiornamenti per IPv4 e IPv6, devi definire due "
+"Configurazioni separate es. 'myddns_ipv4' e 'myddns_ipv6'"
 
 msgid ""
 "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
 msgstr ""
+"In alcune versioni cURL/libcurl in OpenWrt è compilato senza supporto proxy."
 
 msgid "Info"
 msgstr ""
@@ -314,6 +348,8 @@ msgid ""
 "Install 'ca-certificates' package or needed certificates by hand into /etc/"
 "ssl/certs default directory"
 msgstr ""
+"Installa il pacchetto 'ca-certificates' o i certificati necessari "
+"a mano nella directory di default /etc/ssl/certs"
 
 msgid "Interface"
 msgstr "Interfaccia"
@@ -322,408 +358,431 @@ msgid ""
 "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
 "are not supported"
 msgstr ""
+"Intervallo per controllare i cambiamenti dell'IP<br />I valori sotto i 5 minuti == "
+"300 secondi non sono supportati"
 
 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 ""
+"Intervallo per forzare gli aggiornamenti da mandare al provider DDNS<br />Impostanto questo "
+"parametro a 0 forzerà lo script ad eseguirsi una sola volta<br />Valori sotto 'Controllo "
+"Intervallo' eccetto '0' non sono supportati"
 
 msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr ""
+msgstr "Non è raccomandato agli utenti casuali di cambiare le opzioni in questa pagina."
 
 msgid "Last Update"
-msgstr ""
+msgstr "Ultimo Aggiornamento"
 
 msgid "Loading"
-msgstr ""
+msgstr "Caricando"
 
 msgid "Log File Viewer"
-msgstr ""
+msgstr "Visualizzatore Registro"
 
 msgid "Log directory"
-msgstr ""
+msgstr "Directory registro"
 
 msgid "Log length"
-msgstr ""
+msgstr "Lunghezza registro"
 
 msgid "Log to file"
-msgstr ""
+msgstr "Registra su file"
 
 msgid "Log to syslog"
-msgstr ""
+msgstr "Registra su syslog"
 
 msgid "Lookup Hostname"
-msgstr ""
+msgstr "Indirizzo da consultare"
 
 msgid "NOT installed"
-msgstr ""
+msgstr "NON installato"
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
 "communication."
 msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per selezionare una rete da usare per "
+"comunicazione."
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to support secure updates via "
 "HTTPS protocol."
 msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per supportare aggiornamenti sicuri via "
+"protocollo HTTPS."
 
 msgid "Network"
 msgstr "Rete"
 
 msgid "Network on which the ddns-updater scripts will be started"
-msgstr ""
+msgstr "Rete su cui lo script di aggiornamento DDNS sara avviato"
 
 msgid "Never"
-msgstr ""
+msgstr "Mai"
 
 msgid "Next Update"
-msgstr ""
+msgstr "Prossimo Aggiornamento"
 
 msgid "No certificates found"
-msgstr ""
+msgstr "Nessun certificato trovato"
 
 msgid "No data"
-msgstr ""
+msgstr "Nessuno dato"
 
 msgid "No logging"
-msgstr ""
+msgstr "Nessun registro"
 
 msgid "Non-public and by default blocked IP's"
-msgstr ""
+msgstr "Ip non pubblici e bloccati di default"
 
 msgid "Notice"
-msgstr ""
+msgstr "Avviso"
 
 msgid "Number of last lines stored in log files"
-msgstr ""
+msgstr "Numero di ultime linee memorizzato nei file registro"
 
 msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso di puro IPv4/IPv6 solo comunicazione."
 
 msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
-msgstr ""
+msgstr "OPZIONALE: Forza l'uso del TCP invece del UDP di default per richieste DNS."
 
 msgid "OPTIONAL: Network to use for communication"
-msgstr ""
+msgstr "OPZIONALE: Rete da usare per comunicazione"
 
 msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr ""
+msgstr "OPZIONALE: Server Proxy per rivelazioni e aggiornamenti."
 
 msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
-msgstr ""
+msgstr "OPZIONALE: Usa Server DNS non di default per individuare 'IP Registrati'."
 
 msgid "On Error the script will retry the failed action after given time"
-msgstr ""
+msgstr "Ad Errore lo script riproverà l'azione fallita dopo il tempo dato"
 
 msgid "On Error the script will stop execution after given number of retrys"
-msgstr ""
+msgstr "Ad Errore lo script fermerà l'esecuzione dopo il numero di tentativi dati"
 
 msgid "OpenWrt Wiki"
 msgstr ""
 
 msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "Parametro Codificato Opzionale"
 
 msgid "Optional Parameter"
-msgstr ""
+msgstr "Parametro Opzionale"
 
 msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMENC] nell'URL di aggiornamento (URL codificato)"
 
 msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "Opzionale: Sostituisci [PARAMOPT] nell'URL di aggiornamento (URL NON codificato)"
 
 msgid "Overview"
-msgstr ""
+msgstr "Riassunto"
 
 msgid "PROXY-Server"
-msgstr ""
+msgstr "Server PROXY"
 
 msgid "PROXY-Server not supported"
-msgstr ""
+msgstr "SERVER PROXY non supportato"
 
 msgid "Password"
 msgstr "Password"
 
 msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "Percorso per Certificato CA"
 
 msgid "Please [Save & Apply] your changes first"
-msgstr ""
+msgstr "Per favore [Salva & Applica] prima i cambiamenti"
 
 msgid "Please press [Read] button"
-msgstr ""
+msgstr "Per favore premi il pulsante [Leggi]"
 
 msgid "Please update to the current version!"
-msgstr ""
+msgstr "Per favore aggiorna alla versione corrente!"
 
 msgid "Process ID"
-msgstr ""
+msgstr "ID del Processo"
 
 msgid "Read / Reread log file"
-msgstr ""
+msgstr "Leggi / Rileggi registro"
 
 msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "Cambiare provider DDNS veramente?"
 
 msgid "Registered IP"
-msgstr ""
+msgstr "IP Registrato"
 
 msgid "Replaces [DOMAIN] in Update-URL"
-msgstr ""
+msgstr "Sostituisci [DOMAIN] nell'URL di aggiornamento"
 
 msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [PASSWORD] nell'URL di aggiornamento (URL codificato)"
 
 msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "Sostituisci [NOME UTENTE] nell'URL di aggiornamento (URL codificato)"
 
 msgid "Run once"
-msgstr ""
+msgstr "Esegui una volta"
 
 msgid "Script"
 msgstr ""
 
 msgid "Show more"
-msgstr ""
+msgstr "Mostra di più"
 
 msgid "Software update required"
-msgstr ""
+msgstr "Richiesto aggiornamento Software"
 
 msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "Specificare un server DNS non è supportato"
 
 msgid "Start"
-msgstr ""
+msgstr "Inizio"
 
 msgid "Start / Stop"
-msgstr ""
+msgstr "Inizio / Stop"
 
 msgid "Status directory"
 msgstr ""
 
 msgid "Stopped"
-msgstr ""
+msgstr "Fermato"
 
 msgid ""
 "The currently installed 'ddns-scripts' package did not support all available "
 "settings."
 msgstr ""
+"Il pacchetto 'ddns-scripts' attualmente installato non supporta tutte le opzioni "
+"disponibili."
 
 msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "L'opzione di default '0' riproverà all'infinito."
 
 msgid "There is no service configured."
-msgstr ""
+msgstr "Non c'è un servizio configurato."
 
 msgid "Timer Settings"
-msgstr ""
+msgstr "Impostazioni del Timer"
 
 msgid "To change global settings click here"
-msgstr ""
+msgstr "Per cambiare le opzioni globali clicca qui"
 
 msgid "To use cURL activate this option."
-msgstr ""
+msgstr "Per usare cURL attiva questa opzione."
 
 msgid "URL"
 msgstr "URL"
 
 msgid "URL to detect"
-msgstr ""
+msgstr "URL da individuare"
 
 msgid "Unknown error"
-msgstr ""
+msgstr "Errore sconosciuto"
 
 msgid ""
 "Update URL to be used for updating your DDNS Provider.<br />Follow "
 "instructions you will find on their WEB page."
 msgstr ""
+"L'URL di aggiornamento da usare per aggiornare il tuo Provider DDNS.<br />"
+"Segui le istruzioni che trovi sulla loro pagina WEB."
 
 msgid "Update error"
-msgstr ""
+msgstr "Errore di aggiornamento"
 
 msgid "Use HTTP Secure"
-msgstr ""
+msgstr "Usa HTTP Sicuro"
 
 msgid "Use cURL"
-msgstr ""
+msgstr "Usa cURL"
 
 msgid "User defined script to read systems IP-Address"
-msgstr ""
+msgstr "Script definito dall'utente per leggere l'indirizzo IP dei sistemi"
 
 msgid "Username"
 msgstr "Nome Utente"
 
 msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "Usare specifici Server DNS non supportato"
 
 msgid "Verify"
-msgstr ""
+msgstr "Verifica"
 
 msgid "Version"
-msgstr ""
+msgstr "Versione"
 
 msgid "Version Information"
-msgstr ""
+msgstr "Informazione Versione"
 
 msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "Aspettando l'applicazione dei cambiamenti..."
 
 msgid "Warning"
-msgstr ""
+msgstr "Allarme"
 
 msgid ""
 "Writes detailed messages to log file. File will be truncated automatically."
 msgstr ""
+"Scrivi messaggi dettagliati sul registro. Il file sarà tagliato automaticamente."
 
 msgid ""
 "Writes log messages to syslog. Critical Errors will always be written to "
 "syslog."
 msgstr ""
+"Scrivi i messaggi registro al syslog. Gli Errori Critici saranno sempre scritti "
+"sul syslog."
 
 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 ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' o 'hostip', "
+"se hai bisogno di specificare un server DNS che identifichi il tuo IP registrato."
 
 msgid ""
 "You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
 "requests."
 msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' per le "
+"richieste DNS."
 
 msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch'."
 
 msgid ""
 "You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
 "*ssl' package."
 msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch' con il "
+"pacchetto 'libustream-*ssl'."
 
 msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl'."
 
 msgid ""
 "You should install 'wget' or 'uclient-fetch' package or replace libcurl."
 msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'uclient-fetch' o sostituire libcurl."
 
 msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr ""
+msgstr "cURL è installato, ma libcurl è compilato senza supporto proxy."
 
 msgid "cURL without Proxy Support"
-msgstr ""
+msgstr "cURL senza Supporto Proxy"
 
 msgid "can not detect local IP. Please select a different Source combination"
-msgstr ""
+msgstr "non individuo l'IP locale. Per favore seleziona una combinazione Sorgente diversa"
 
 msgid "can not resolve host:"
-msgstr ""
+msgstr "non posso risolvere host:"
 
 msgid "config error"
-msgstr ""
+msgstr "errore configurazione"
 
 msgid "days"
-msgstr ""
+msgstr "giorni"
 
 msgid "directory or path/file"
-msgstr ""
+msgstr "directory o percorso/file"
 
 msgid "either url or script could be set"
-msgstr ""
+msgstr "o l'url o lo script può essere impostato"
 
 msgid "enable here"
-msgstr ""
+msgstr "abilita qui"
 
 msgid "file or directory not found or not 'IGNORE'"
-msgstr ""
+msgstr "file o directory non trovati o non 'IGNORE'"
 
 msgid "help"
-msgstr ""
+msgstr "aiuto"
 
 msgid "hours"
-msgstr ""
+msgstr "ore"
 
 msgid "installed"
-msgstr ""
+msgstr "installato"
 
 msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "FQDN invalido / richiesto - Esempio"
 
 msgid "minimum value '0'"
-msgstr ""
+msgstr "valore minimo '0'"
 
 msgid "minimum value '1'"
-msgstr ""
+msgstr "valore minimo '1'"
 
 msgid "minimum value 5 minutes == 300 seconds"
-msgstr ""
+msgstr "valore minimo 5 minuti == 300 secondi"
 
 msgid "minutes"
-msgstr ""
+msgstr "minuti"
 
 msgid "missing / required"
-msgstr ""
+msgstr "mancante / richiesto"
 
 msgid "must be greater or equal 'Check Interval'"
-msgstr ""
+msgstr "deve essere più grande o uguale 'Controlla Intervallo'"
 
 msgid "must start with 'http://'"
-msgstr ""
+msgstr "deve iniziare con 'http://'"
 
 msgid "nc (netcat) can not connect"
-msgstr ""
+msgstr "nc (netcat) non può connettersi"
 
 msgid "never"
-msgstr ""
+msgstr "mai"
 
 msgid "no data"
-msgstr ""
+msgstr "Niente dati"
 
 msgid "not found or not executable - Sample: '/path/to/script.sh'"
-msgstr ""
+msgstr "non trovato o non eseguibile - Esempio: '/path/to/script.sh'"
 
 msgid "nslookup can not resolve host"
-msgstr ""
+msgstr "nslookup non può risolvere l'host"
 
 msgid "or"
-msgstr ""
+msgstr "o"
 
 msgid "or higher"
-msgstr ""
+msgstr "o più alto"
 
 msgid "please disable"
-msgstr ""
+msgstr "per favore disabilita"
 
 msgid "please remove entry"
-msgstr ""
+msgstr "per favore rimuovi la voce"
 
 msgid "please select 'IPv4' address version"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4'"
 
 msgid "please select 'IPv4' address version in"
-msgstr ""
+msgstr "per favore seleziona versione indirizzo 'IPv4' in"
 
 msgid "please set to 'default'"
-msgstr ""
+msgstr "per favore imposta a 'default'"
 
 msgid "proxy port missing"
-msgstr ""
+msgstr "porta proxy mancante"
 
 msgid "required"
-msgstr ""
+msgstr "richiesto"
 
 msgid "seconds"
-msgstr ""
+msgstr "secondi"
 
 msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr ""
+msgstr "per eseguire HTTPS senza la verifica dei certificati del server (insicuro)"
 
 msgid "unknown error"
-msgstr ""
+msgstr "errore sconosciuto"
 
 msgid "unspecific error"
-msgstr ""
+msgstr "errore non specifico"
 
 msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr ""
+msgstr "usa nome host, FQDN, indirizzo IPv4 o IPv6"
index 4970846..ab22837 100644 (file)
@@ -2,15 +2,15 @@ msgid ""
 msgstr ""
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2016-07-01 22:40-0300\n"
-"Last-Translator: Matheus Dal Mago <matheusdalmago10@gmail.com>\n"
+"PO-Revision-Date: 2017-02-20 17:41-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language-Team: \n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Poedit 1.8.8\n"
+"X-Generator: Poedit 1.8.11\n"
 
 msgid "&"
 msgstr "&"
@@ -228,7 +228,7 @@ msgid "Error Retry Interval"
 msgstr "Intervalo de tentativas em Erro"
 
 msgid "Event Network"
-msgstr ""
+msgstr "Rede de Evento"
 
 msgid "File"
 msgstr "Arquivo"
@@ -438,16 +438,16 @@ msgid "No certificates found"
 msgstr "Nenhum certificado encontrado"
 
 msgid "No data"
-msgstr ""
+msgstr "Sem dados"
 
 msgid "No logging"
-msgstr ""
+msgstr "Sem registros"
 
 msgid "Non-public and by default blocked IP's"
 msgstr "IPs não públicos e bloqueados por padrão"
 
 msgid "Notice"
-msgstr ""
+msgstr "Aviso"
 
 msgid "Number of last lines stored in log files"
 msgstr "Número das últimas linhas salvas nos arquivos de log"
@@ -475,7 +475,7 @@ msgstr ""
 "Em Erro, o script irá para a execução após um número definido de tentativas"
 
 msgid "OpenWrt Wiki"
-msgstr ""
+msgstr "Wiki do OpenWRT"
 
 msgid "Optional Encoded Parameter"
 msgstr "Parâmetro Opcionalmente Codificado"
@@ -490,7 +490,7 @@ msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
 msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização"
 
 msgid "Overview"
-msgstr ""
+msgstr "Visão Geral"
 
 msgid "PROXY-Server"
 msgstr "servidor PROXY"
@@ -575,7 +575,7 @@ msgid "There is no service configured."
 msgstr "Não há serviço configurado"
 
 msgid "Timer Settings"
-msgstr ""
+msgstr "Configurações do Controlador de Tempo"
 
 msgid "To change global settings click here"
 msgstr "Clique aqui para mudar configurações globais"
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..2e63ee1
--- /dev/null
@@ -0,0 +1,724 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "&"
+msgstr "&"
+
+msgid "-- custom --"
+msgstr "-- anpassad --"
+
+msgid "-- default --"
+msgstr "-- standard --"
+
+msgid "Advanced Settings"
+msgstr "Avancerade inställningar"
+
+msgid "Allow non-public IP's"
+msgstr "Tillåt icke-publika IP-adresser"
+
+msgid "Applying changes"
+msgstr "Verkställer ändringar"
+
+msgid "Basic Settings"
+msgstr "Standardinställningar"
+
+msgid ""
+"Below a list of configuration tips for your system to run Dynamic DNS "
+"updates without limitations"
+msgstr ""
+
+msgid ""
+"Below is a list of configured DDNS configurations and their current state."
+msgstr ""
+"Här nedanför finns det en lista över konfigurerade DDNS-konfigurationer och deras nuvarande skick."
+
+msgid "Bind Network"
+msgstr "Bind samman nätverk"
+
+msgid "Binding to a specific network not supported"
+msgstr "Att binda samman med ett specifikt nätverk stöds inte"
+
+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 91bb756..f004f82 100644 (file)
@@ -1,18 +1,22 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2015-04-23 13:00+0800\n"
-"Last-Translator: Syrone Wong <wong.syrone@gmail.com>\n"
+"PO-Revision-Date: 2017-10-29 14:14+0800\n"
+"Last-Translator: Yangfl <mmyangfl@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 1.8.4\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 
 msgid "&"
-msgstr ""
+msgstr "&"
 
 msgid "-- custom --"
 msgstr "-- 自定义 --"
@@ -24,7 +28,7 @@ msgid "Advanced Settings"
 msgstr "高级设置"
 
 msgid "Allow non-public IP's"
-msgstr "允许非公网IP"
+msgstr "允许非公网 IP"
 
 msgid "Applying changes"
 msgstr "正在应用更改"
@@ -35,11 +39,11 @@ msgstr "基础设置"
 msgid ""
 "Below a list of configuration tips for your system to run Dynamic DNS "
 "updates without limitations"
-msgstr "以下是一个能够让你的系统不受限制地进行动态DNS更新的设置贴士."
+msgstr "以下是一个能够让您的系统不受限制地进行动态 DNS 更新设置的提示列表"
 
 msgid ""
 "Below is a list of configured DDNS configurations and their current state."
-msgstr "ä¸\80ä¸\8bæ\98¯å½\93å\89\8då·²ç»\8fé\85\8d置好ç\9a\84DDNS设置项å\88\97表以å\8f\8aå®\83们ç\9a\84å½\93å\89\8dç\8a¶æ\80\81."
+msgstr "以ä¸\8bæ\98¯å½\93å\89\8då·²ç»\8fé\85\8d置好ç\9a\84 DDNS è®¾ç½®é¡¹å\88\97表以å\8f\8aå®\83们ç\9a\84å½\93å\89\8dç\8a¶æ\80\81ã\80\82"
 
 msgid "Bind Network"
 msgstr "使用的接口"
@@ -50,23 +54,27 @@ msgstr "不支持绑定到一个指定的网络"
 msgid ""
 "BusyBox's nslookup and Wget do not support to specify the IP version to use "
 "for communication with DDNS Provider!"
-msgstr "与DDNS供应商通讯时BusyBox的nslookup和Wget不支持设置特定的IP协议版本."
+msgstr ""
+"与 DDNS 供应商通讯时,BusyBox 的 nslookup 和 Wget 不支持设置特定的 IP 协议版"
+"本。"
 
 msgid ""
 "BusyBox's nslookup and hostip do not support to specify to use TCP instead "
 "of default UDP when requesting DNS server!"
 msgstr ""
+"向 DNS 服务器查询时,BusyBox 的 nslookup 和 hostip 不支持使用 TCP 而不是默认"
+"的 UDP!"
 
 msgid ""
 "BusyBox's nslookup in the current compiled version does not handle given DNS "
 "Servers correctly!"
-msgstr ""
+msgstr "当前编译版本中 BusyBox 的 nslookup 在处理给定的 DNS 服务器不正确!"
 
 msgid "Casual users should not change this setting"
 msgstr "普通用户不应该改变这个设置"
 
 msgid "Change provider"
-msgstr ""
+msgstr "更改提供者"
 
 msgid "Check Interval"
 msgstr "检查时间周期"
@@ -83,10 +91,10 @@ msgstr "设置"
 msgid ""
 "Configure here the details for all Dynamic DNS services including this LuCI "
 "application."
-msgstr "在这里修改动态DNS服务的详细配置"
+msgstr "在这里修改动态 DNS 服务的详细配置。"
 
 msgid "Configure here the details for selected Dynamic DNS service."
-msgstr "在这里修改选择的DDNS服务的详细配置"
+msgstr "在这里修改选择的 DDNS 服务的详细配置。"
 
 msgid "Current setting"
 msgstr "当前设置"
@@ -96,76 +104,76 @@ msgid ""
 ">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
 "force_interval set to '0')"
 msgstr ""
-"现在,DDNS更新在开机或者接口动作时不会被触发<br />如果你手工运行DDNS脚本的话"
-"(例如使用cron时把force_interval设置为0),这是默认设置."
+"现在,DDNS 更新在开机或者接口动作时不会被触发。<br />如果您手工运行 DDNS 脚本"
+"的话(例如使用 cron 时把 force_interval 设置为 0),这是默认设置。"
 
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">You can start/stop each configuration here. It will run until next reboot."
 msgstr ""
-"现在,DDNS更新在开机或者接口动作时不会被触发<br />你可以在这里开始/停止每一个"
-"设置的条目.它在下次重启之前一直有效."
+"现在,DDNS 更新在开机或者接口动作时不会被触发。<br />您可以在这里开始/停止每"
+"一个设置的条目。它在下次重启之前一直有效。"
 
 msgid "Custom update script to be used for updating your DDNS Provider."
-msgstr "用来更新动态DNS的自定义脚本"
+msgstr "用来更新动态 DNS 的自定义脚本。"
 
 msgid "Custom update-URL"
-msgstr "自定义更新URL"
+msgstr "自定义更新 URL"
 
 msgid "Custom update-script"
 msgstr "自定义更新脚本"
 
 msgid "DDNS Autostart disabled"
-msgstr "DDNS自动启动已禁用."
+msgstr "DDNS 自动启动已禁用。"
 
 msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "DDNS 客户端配置"
 
 msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "DDNS 客户端文档"
 
 msgid "DDNS Service provider"
-msgstr "DDNS服务提供商"
+msgstr "DDNS 服务提供商"
 
 msgid "DNS requests via TCP not supported"
-msgstr "不支持使用TCP进行DNS解析"
+msgstr "不支持使用 TCP 进行 DNS 解析"
 
 msgid "DNS-Server"
-msgstr "DNS服务器"
+msgstr "DNS-服务器"
 
 msgid "Date format"
 msgstr "日期格式"
 
 msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr "设定用来读取系统IPv4地址的网页"
+msgstr "设定用来读取系统 IPv4 地址的网页"
 
 msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr "设定用来读取系统IPv6地址的网页"
+msgstr "设定用来读取系统 IPv6 地址的网页"
 
 msgid "Defines the interface to read systems IP-Address from"
-msgstr "设定用来读取系统IP地址的接口"
+msgstr "设定用来读取系统 IP 地址的接口"
 
 msgid "Defines the network to read systems IPv4-Address from"
-msgstr "设定用来读取系统IPv4地址的网络"
+msgstr "设定用来读取系统 IPv4 地址的网络"
 
 msgid "Defines the network to read systems IPv6-Address from"
-msgstr "设定用来读取系统IPv6地址的网络"
+msgstr "设定用来读取系统 IPv6 地址的网络"
 
 msgid ""
 "Defines the source to read systems IPv4-Address from, that will be send to "
 "the DDNS provider"
-msgstr "设定IPv4地址的来源.这将会被发送给DDNS提供商"
+msgstr "设定 IPv4 地址的来源。这将会被发送给 DDNS 提供商"
 
 msgid ""
 "Defines the source to read systems IPv6-Address from, that will be send to "
 "the DDNS provider"
-msgstr "设定IPv6地址的来源.这将会被发送给DDNS提供商"
+msgstr "设定 IPv6 地址的来源。这将会被发送给 DDNS 提供商"
 
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr "设定哪一个IP地址(IPv4或IPv6)会被发送给DDNS提供商"
+msgstr "设定哪一个 IP 地址(IPv4 或 IPv6)会被发送给 DDNS 提供商"
 
 msgid "Details for"
-msgstr "详情:"
+msgstr "详情"
 
 msgid "Directory contains Log files for each running section"
 msgstr "保存每一个运行中的设置的运行日志的目录"
@@ -178,18 +186,18 @@ msgid "Disabled"
 msgstr "已禁用"
 
 msgid "Domain"
-msgstr ""
+msgstr "域名"
 
 msgid "Dynamic DNS"
-msgstr "动态DNS"
+msgstr "动态 DNS"
 
 msgid ""
 "Dynamic DNS allows that your router can be reached with a fixed hostname "
 "while having a dynamically changing IP address."
-msgstr "动态DNS允许为拥有动态IP的主机配置一个固定的可访问域名."
+msgstr "动态 DNS 允许为拥有动态 IP 的主机配置一个固定的可访问域名。"
 
 msgid "Enable secure communication with DDNS provider"
-msgstr "启用安全连接与DDNS供应商联系"
+msgstr "启用安全连接与 DDNS 提供商联系"
 
 msgid "Enabled"
 msgstr "已启用"
@@ -219,8 +227,8 @@ msgid ""
 "Follow this link<br />You will find more hints to optimize your system to "
 "run DDNS scripts with all options"
 msgstr ""
-"打开这个链接<br />你将会得到更多关于如何通过所有设置项优化你的系统以运行DDNS"
-"脚本的提示."
+"打开这个链接<br />您将会得到更多关于如何通过所有设置项优化您的系统以运行 "
+"DDNS 脚本的提示"
 
 msgid "For detailed information about parameter settings look here."
 msgstr "请看这里获得关于参数设置的详细信息"
@@ -229,91 +237,92 @@ msgid "For supported codes look here"
 msgstr "查看这里获取支持的编码"
 
 msgid "Force IP Version"
-msgstr "强制设定IP版本"
+msgstr "强制设定 IP 版本"
 
 msgid "Force IP Version not supported"
-msgstr "不支持强制设定IP版本"
+msgstr "不支持强制设定 IP 版本"
 
 msgid "Force Interval"
 msgstr "设定周期"
 
 msgid "Force TCP on DNS"
-msgstr "强制使用TCP进行DNS查询"
+msgstr "强制使用 TCP 进行 DNS 查询"
 
 msgid "Forced IP Version don't matched"
-msgstr "强制设定的IP版本不匹配"
+msgstr "强制设定的 IP 版本不匹配"
 
 msgid "Format"
 msgstr "格式"
 
 msgid "Format: IP or FQDN"
-msgstr "格式:IP或者FQDN"
+msgstr "格式:IP 或者 FQDN"
 
 msgid ""
 "GNU Wget will use the IP of given network, cURL will use the physical "
 "interface."
-msgstr "GNU Wget将会使用给定的网络的IP地址,而cURL将会使用物理接口"
+msgstr "GNU Wget 将会使用给定的网络的 IP 地址,而 cURL 将会使用物理接口。"
 
 msgid "Global Settings"
 msgstr "全局设置"
 
 msgid "HTTPS not supported"
-msgstr "不支持HTTPS"
+msgstr "不支持 HTTPS"
 
 msgid "Hints"
 msgstr "提示"
 
 msgid "Hostname/FQDN to validate, if IP update happen or necessary"
-msgstr ""
+msgstr "主机名/FQDN 验证,如果 IP 更新发生或必要"
 
 msgid "IP address source"
-msgstr "IP地址来源"
+msgstr "IP 地址来源"
 
 msgid "IP address version"
-msgstr "IP地址版本"
+msgstr "IP 地址版本"
 
 msgid "IPv4-Address"
-msgstr "IPv4地址"
+msgstr "IPv4 地址"
 
 msgid "IPv6 address must be given in square brackets"
-msgstr "IPv6地址必须填写在中括号(\"[  ]\")内"
+msgstr "IPv6 地址必须填写在中括号(\"[  ]\")内"
 
 msgid ""
 "IPv6 is currently not (fully) supported by this system<br />Please follow "
 "the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
 "your system to the latest OpenWrt Release"
 msgstr ""
-"当前系统暂时不能(完整地)支持IPv6<br />请查看OpenWrt首页的介绍以启用IPv6支持"
-"<br />或者更新你的系统到最新OpenWrt版本"
+"当前系统暂时不能(完整地)支持 IPv6<br />请查看 OpenWrt 首页的介绍以启用 "
+"IPv6 支持<br />或者更新您的系统到最新 OpenWrt 版本"
 
 msgid "IPv6 not supported"
-msgstr "IPv6不被支持"
+msgstr "IPv6 不被支持"
 
 msgid "IPv6-Address"
-msgstr "IPv6地址"
+msgstr "IPv6 地址"
 
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr "如果cURL和GNU Wget同时被安装,那么Wget将会被优先使用."
+msgstr "如果 cURL 和 GNU Wget 同时被安装,那么 Wget 将会被优先使用。"
 
 msgid ""
 "If this service section is disabled it could not be started.<br />Neither "
 "from LuCI interface nor from console"
 msgstr ""
-"如果服务配置被禁用那么它将不能被启动.<br />无论是通过LuCI页面或者是通过终端."
+"如果服务配置被禁用,那么它将不能被启动。<br />无论是通过 LuCI 页面或者是通过"
+"终端。"
 
 msgid "If using secure communication you should verify server certificates!"
-msgstr ""
+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 ""
-"如果你需要同时更新IPv4和IPv6地址,你需要单独添加两个配置项(例"
-"如'myddns_ipv4'和'myddns_ipv6')"
+"如果您需要同时更新 IPv4 和 IPv6 地址,您需要单独添加两个配置项(例"
+"如'myddns_ipv4'和'myddns_ipv6'"
 
 msgid ""
 "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
-msgstr "OpenWrt中,cURL/libcurl的某些版本编译时没有启用代理服务器支持"
+msgstr "OpenWrt 中,cURL/libcurl 的某些版本编译时没有启用代理服务器支持"
 
 msgid "Info"
 msgstr "信息"
@@ -322,6 +331,7 @@ msgid ""
 "Install 'ca-certificates' package or needed certificates by hand into /etc/"
 "ssl/certs default directory"
 msgstr ""
+"手动将“ca-certificates”包或需要的证书安装到 /etc/ssl/certs 的默认目录中"
 
 msgid "Interface"
 msgstr "接口"
@@ -329,18 +339,18 @@ msgstr "接口"
 msgid ""
 "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
 "are not supported"
-msgstr "检查IP是否改变的时间隔<br />不支持低于5分钟(300秒)的数值."
+msgstr "检查 IP 是否改变的时间隔<br />不支持小于 5 分钟(300 秒)的数值。"
 
 msgid ""
 "Interval to force updates send to DDNS Provider<br />Setting this parameter "
 "to 0 will force the script to only run once<br />Values lower 'Check "
 "Interval' except '0' are not supported"
 msgstr ""
-"强制向提供商更新DDNS的时间周期<br />把这个参数设置为0将会让脚本仅执行一次"
-"<br />不支持低于\"检查时间周期\"的数值(除了0)."
+"强制向提供商更新 DDNS 的时间周期<br />将这个参数设置为 0 则会让脚本仅执行一次"
+"<br />不支持小于\"检查时间周期\"的数值(除了 0)。"
 
 msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr "强烈不建议初次使用的用户修改本页设定."
+msgstr "强烈不建议初次使用的用户修改本页设定"
 
 msgid "Last Update"
 msgstr "上次更新"
@@ -364,26 +374,28 @@ msgid "Log to syslog"
 msgstr "把日志记录到系统日志"
 
 msgid "Lookup Hostname"
-msgstr ""
+msgstr "查询主机名"
 
 msgid "NOT installed"
-msgstr ""
+msgstr "未安装"
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
 "communication."
-msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法选择一个网络用于通信."
+msgstr "包含 SSL 支持的 GNU Wget 或者 cURL 均未安装,无法选择网络用于通信。"
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to support secure updates via "
 "HTTPS protocol."
 msgstr ""
+"包含 SSL 支持的 GNU Wget 或者 cURL 均未安装,无法通过 HTTPS 协议进行安全的更"
+"新。"
 
 msgid "Network"
 msgstr "网络"
 
 msgid "Network on which the ddns-updater scripts will be started"
-msgstr "DDNS更新脚本将会被运行于该网络"
+msgstr "DDNS 更新脚本将会运行于该网络"
 
 msgid "Never"
 msgstr "从不"
@@ -392,7 +404,7 @@ msgid "Next Update"
 msgstr "下次更新"
 
 msgid "No certificates found"
-msgstr ""
+msgstr "找不到证书"
 
 msgid "No data"
 msgstr "无数据"
@@ -401,7 +413,7 @@ msgid "No logging"
 msgstr "无日志"
 
 msgid "Non-public and by default blocked IP's"
-msgstr "非公网IP以及默认被锁定的IP"
+msgstr "非公网 IP 以及默认被锁定的 IP"
 
 msgid "Notice"
 msgstr "提示"
@@ -410,40 +422,40 @@ msgid "Number of last lines stored in log files"
 msgstr "日志文件中的最后几行"
 
 msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr "可选:强制使用仅IPv4/IPv6通信."
+msgstr "可选:强制仅使用 IPv4/IPv6 通信。"
 
 msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
-msgstr "可选:强制使用TCP而非UDP请求DNS."
+msgstr "可选:强制使用 TCP 而非 UDP 请求 DNS。"
 
 msgid "OPTIONAL: Network to use for communication"
-msgstr "可选:用于通信的网络"
+msgstr "可选用于通信的网络"
 
 msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr "可选:用于检测以及更新的代理服务器"
+msgstr "可选:用于检测以及更新的代理服务器。"
 
 msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
-msgstr "可选:使用非默认DNS服务器检测\"已注册的IP地址\""
+msgstr "可选:使用非默认 DNS 服务器检测\"已注册的 IP 地址\"。"
 
 msgid "On Error the script will retry the failed action after given time"
-msgstr "当出错时,脚本将会重试失败的动作的次数"
+msgstr "当出错时脚本将会重试失败的动作的次数"
 
 msgid "On Error the script will stop execution after given number of retrys"
-msgstr "当出错时,脚本将会重试该次数之后退出"
+msgstr "当出错时脚本将会重试该次数之后退出"
 
 msgid "OpenWrt Wiki"
-msgstr ""
+msgstr "OpenWrt Wiki"
 
 msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "可选编码参数"
 
 msgid "Optional Parameter"
-msgstr ""
+msgstr "可选参数"
 
 msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "可选:替换更新 URL(已编码 URL)中的 [PARAMENC]"
 
 msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "可选:替换更新 URL(未编码 URL)中的 [PARAMENC]"
 
 msgid "Overview"
 msgstr "总览"
@@ -458,7 +470,7 @@ msgid "Password"
 msgstr "密码"
 
 msgid "Path to CA-Certificate"
-msgstr "CA证书路径"
+msgstr "CA 证书路径"
 
 msgid "Please [Save & Apply] your changes first"
 msgstr "请先保存并应用您的设置"
@@ -470,25 +482,25 @@ msgid "Please update to the current version!"
 msgstr "请更新到最新版本!"
 
 msgid "Process ID"
-msgstr "处理ID"
+msgstr "进程 ID"
 
 msgid "Read / Reread log file"
 msgstr "读取/重新读取日志文件"
 
 msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "确定更改 DDNS 提供商吗?"
 
 msgid "Registered IP"
-msgstr "已注册的IP地址"
+msgstr "已注册的 IP 地址"
 
 msgid "Replaces [DOMAIN] in Update-URL"
-msgstr "在更新URL中使用[DOMAIN]替换域名"
+msgstr "替换更新 URL 中的 [DOMAIN]"
 
 msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr "在更新URL中使用[PASSWORD]替换密码"
+msgstr "替换更新 URL(已编码 URL)中的 [PASSWORD]"
 
 msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr "在更新URL中使用[USERNAME]替换用户名"
+msgstr "替换更新 URL(已编码 URL)中的 [USERNAME]"
 
 msgid "Run once"
 msgstr "运行一次"
@@ -503,13 +515,13 @@ msgid "Software update required"
 msgstr "需要进行软件更新"
 
 msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "不支持指定 DNS 服务器"
 
 msgid "Start"
-msgstr "启ç\94¨"
+msgstr "启å\8a¨"
 
 msgid "Start / Stop"
-msgstr "启用/禁用"
+msgstr "启动 / 停止"
 
 msgid "Status directory"
 msgstr "状态目录"
@@ -523,7 +535,7 @@ msgid ""
 msgstr "当前已安装的'ddns-scripts'软件包暂不支持所有可用设置项"
 
 msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "默认设置“0”将无限重试。"
 
 msgid "There is no service configured."
 msgstr "没有已经配置好的服务项"
@@ -532,16 +544,16 @@ msgid "Timer Settings"
 msgstr "计时器设定"
 
 msgid "To change global settings click here"
-msgstr "点击这里更改全局设置"
+msgstr "点击这里更改全局设置"
 
 msgid "To use cURL activate this option."
-msgstr "选中这个项以使用cURL"
+msgstr "选中此项以使用 cURL"
 
 msgid "URL"
 msgstr "URL"
 
 msgid "URL to detect"
-msgstr "用于检测的URL"
+msgstr "用于检测的 URL"
 
 msgid "Unknown error"
 msgstr "未知错误"
@@ -550,25 +562,26 @@ msgid ""
 "Update URL to be used for updating your DDNS Provider.<br />Follow "
 "instructions you will find on their WEB page."
 msgstr ""
-"DDNS提供商用于更新DDNS的URL<br />跟随教程你将会在它们的网站上提供这个URL."
+"DDNS 提供商用于更新 DDNS 的 URL。<br />跟随教程,您可以在它们的网站上找到这"
+"个 URL。"
 
 msgid "Update error"
 msgstr "更新错误"
 
 msgid "Use HTTP Secure"
-msgstr "使用HTTPS"
+msgstr "使用 HTTPS"
 
 msgid "Use cURL"
-msgstr "使用cURL"
+msgstr "使用 cURL"
 
 msgid "User defined script to read systems IP-Address"
-msgstr "使用设定的脚本来读取系统IP地址"
+msgstr "使用设定的脚本来读取系统 IP 地址"
 
 msgid "Username"
 msgstr "用户名"
 
 msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "不支持使用特定的 DNS 服务器"
 
 msgid "Verify"
 msgstr "验证"
@@ -587,49 +600,51 @@ msgstr "等待"
 
 msgid ""
 "Writes detailed messages to log file. File will be truncated automatically."
-msgstr "向日志中写入详细信息.文件将会被自动减小."
+msgstr "向日志中写入详细信息。文件将自动缩小。"
 
 msgid ""
 "Writes log messages to syslog. Critical Errors will always be written to "
 "syslog."
-msgstr "把日志写入系统日志.无论是否启用这项,错误信息总是会被写入系统日志"
+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 ""
+"如果您需要指定 DNS 服务器来检测您注册的 IP,您应该安装“bind-host”或“knot-"
+"host”或“drill”或“hostip”软件包。"
 
 msgid ""
 "You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
 "requests."
-msgstr ""
+msgstr "您应该为 DNS 请求安装“bind-host”或“knot-host”或“drill”软件包。"
 
 msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "您应该安装“wget”或“curl”或“uclient-fetch”软件包。"
 
 msgid ""
 "You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
 "*ssl' package."
-msgstr ""
+msgstr "您应该安装“wget”或“curl”或“uclient-fetch”,及“libustream-*ssl”软件包。"
 
 msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "您应该安装“wget”或“curl”软件包。"
 
 msgid ""
 "You should install 'wget' or 'uclient-fetch' package or replace libcurl."
-msgstr ""
+msgstr "您应该安装“wget”或“uclient-fetch”软件包,或替换 libcurl。"
 
 msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr "cURL已经安装,但是libcurl编译时没有启用代理支持."
+msgstr "cURL 已经安装,但是 libcurl 编译时没有启用代理支持。"
 
 msgid "cURL without Proxy Support"
-msgstr "cURL包含代理支持"
+msgstr "cURL 没有包含代理支持"
 
 msgid "can not detect local IP. Please select a different Source combination"
-msgstr "不能确定本地IP.请更换IP来源."
+msgstr "无法确定本地 IP。请更换 IP 来源。"
 
 msgid "can not resolve host:"
-msgstr "不能解析主机:"
+msgstr "无法解析主机:"
 
 msgid "config error"
 msgstr "配置错误"
@@ -641,7 +656,7 @@ msgid "directory or path/file"
 msgstr "目录或者到文件的路径"
 
 msgid "either url or script could be set"
-msgstr "接受URL或者脚本"
+msgstr "接受 URL 或者脚本"
 
 msgid "enable here"
 msgstr "在这里启用"
@@ -659,16 +674,16 @@ msgid "installed"
 msgstr "已安装"
 
 msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "FQDN 无效 / 必需 - 示例"
 
 msgid "minimum value '0'"
-msgstr "最小值0"
+msgstr "最小值 0"
 
 msgid "minimum value '1'"
-msgstr "最小值1"
+msgstr "最小值 1"
 
 msgid "minimum value 5 minutes == 300 seconds"
-msgstr "最小值为5分钟(300秒)"
+msgstr "最小值为 5 分钟(300 秒)"
 
 msgid "minutes"
 msgstr "分钟"
@@ -683,7 +698,7 @@ msgid "must start with 'http://'"
 msgstr "必须以'http://'开头"
 
 msgid "nc (netcat) can not connect"
-msgstr "nc(netcat)不可连接"
+msgstr "nc(netcat)不可连接"
 
 msgid "never"
 msgstr "从不"
@@ -692,10 +707,10 @@ msgid "no data"
 msgstr "无数据"
 
 msgid "not found or not executable - Sample: '/path/to/script.sh'"
-msgstr "未找到或者不可执行 - 示例: '/path/to/script.sh'"
+msgstr "未找到或者不可执行 - 示例:“/path/to/script.sh”"
 
 msgid "nslookup can not resolve host"
-msgstr "nslookup不能解析主机"
+msgstr "nslookup 不能解析主机"
 
 msgid "or"
 msgstr "或者"
@@ -710,10 +725,10 @@ msgid "please remove entry"
 msgstr "请移除该字段"
 
 msgid "please select 'IPv4' address version"
-msgstr "请设定IPv4地址"
+msgstr "请设定 IPv4 地址"
 
 msgid "please select 'IPv4' address version in"
-msgstr "请设定IPv4地址于"
+msgstr "请设定 IPv4 地址于"
 
 msgid "please set to 'default'"
 msgstr "请设置为\"默认\""
@@ -728,7 +743,7 @@ msgid "seconds"
 msgstr "秒"
 
 msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr "使用HTTPS但不检查服务器证书(不安全)"
+msgstr "使用 HTTPS 但不检查服务器证书(不安全)"
 
 msgid "unknown error"
 msgstr "未知错误"
@@ -737,7 +752,7 @@ msgid "unspecific error"
 msgstr "未指定的错误"
 
 msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr "使用主机名或IPv4/IPv6地址"
+msgstr "使用主机名或 IPv4/IPv6 地址"
 
 #~ msgid ""
 #~ "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
@@ -745,13 +760,13 @@ msgstr "使用主机名或IPv4/IPv6地址"
 #~ msgstr "包含SSL支持的GNU Wget或者cURL均未被安装.无法使用HTTPS更新DDNS"
 
 #~ msgid "You should install BIND host package for DNS requests."
-#~ msgstr "需要安装BIND以请求DNS记录."
+#~ msgstr "需要安装BIND以请求DNS记录."
 
 #~ msgid "You should install GNU Wget with SSL (preferred) or cURL package."
-#~ msgstr "需要安装包含SSL支持的GNU Wget(推荐)或是cURL软件包."
+#~ msgstr "需要安装包含SSL支持的GNU Wget(推荐)或是cURL软件包."
 
 #~ msgid "You should install GNU Wget with SSL or cURL package."
-#~ msgstr "需要安装包含SSL支持的GNU Wget或是cURL软件包."
+#~ msgstr "需要安装包含SSL支持的GNU Wget或是cURL软件包."
 
 #~ msgid "You should install GNU Wget with SSL or replace libcurl."
-#~ msgstr "需要安装包含SSL支持的GNU Wget或替换libcurl."
+#~ msgstr "需要安装包含SSL支持的GNU Wget或替换libcurl."
index ae0aaba..581973b 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: luci-app-ddns 2.4.0-1\n"
 "POT-Creation-Date: 2016-01-30 11:07+0100\n"
-"PO-Revision-Date: 2013-08-07 15:53+0200\n"
-"Last-Translator: Ethan <ethan42411@gmail.com>\n"
-"Language-Team: \n"
+"PO-Revision-Date: 2017-10-29 14:14+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
 "Language: zh_TW\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 1.8.4\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 
 msgid "&"
-msgstr ""
+msgstr "&"
 
 msgid "-- custom --"
-msgstr ""
+msgstr "-- 自定義 --"
 
 msgid "-- default --"
-msgstr ""
+msgstr "-- 預設 --"
 
 msgid "Advanced Settings"
-msgstr ""
+msgstr "高階設定"
 
 msgid "Allow non-public IP's"
-msgstr ""
+msgstr "允許非公網 IP"
 
 msgid "Applying changes"
-msgstr ""
+msgstr "正在應用更改"
 
 msgid "Basic Settings"
-msgstr ""
+msgstr "基礎設定"
 
 msgid ""
 "Below a list of configuration tips for your system to run Dynamic DNS "
 "updates without limitations"
-msgstr ""
+msgstr "以下是一個能夠讓您的系統不受限制地進行動態 DNS 更新設定的提示列表"
 
 msgid ""
 "Below is a list of configured DDNS configurations and their current state."
-msgstr ""
+msgstr "以下是當前已經配置好的 DDNS 設定項列表以及它們的當前狀態。"
 
 msgid "Bind Network"
-msgstr ""
+msgstr "使用的介面"
 
 msgid "Binding to a specific network not supported"
-msgstr ""
+msgstr "不支援繫結到一個指定的網路"
 
 msgid ""
 "BusyBox's nslookup and Wget do not support to specify the IP version to use "
 "for communication with DDNS Provider!"
 msgstr ""
+"與 DDNS 供應商通訊時,BusyBox 的 nslookup 和 Wget 不支援設定特定的 IP 協議版"
+"本。"
 
 msgid ""
 "BusyBox's nslookup and hostip do not support to specify to use TCP instead "
 "of default UDP when requesting DNS server!"
 msgstr ""
+"向 DNS 伺服器查詢時,BusyBox 的 nslookup 和 hostip 不支援使用 TCP 而不是預設"
+"的 UDP!"
 
 msgid ""
 "BusyBox's nslookup in the current compiled version does not handle given DNS "
 "Servers correctly!"
-msgstr ""
+msgstr "當前編譯版本中 BusyBox 的 nslookup 在處理給定的 DNS 伺服器不正確!"
 
 msgid "Casual users should not change this setting"
-msgstr ""
+msgstr "普通使用者不應該改變這個設定"
 
 msgid "Change provider"
-msgstr ""
+msgstr "更改提供者"
 
 msgid "Check Interval"
-msgstr ""
+msgstr "檢查時間週期"
 
 msgid "Collecting data..."
-msgstr ""
+msgstr "正在收集資料..."
 
 msgid "Config error"
-msgstr ""
+msgstr "配置錯誤"
 
 msgid "Configuration"
-msgstr ""
+msgstr "設定"
 
 msgid ""
 "Configure here the details for all Dynamic DNS services including this LuCI "
 "application."
-msgstr ""
+msgstr "在這裡修改動態 DNS 服務的詳細配置。"
 
 msgid "Configure here the details for selected Dynamic DNS service."
-msgstr ""
+msgstr "在這裡修改選擇的 DDNS 服務的詳細配置。"
 
 msgid "Current setting"
-msgstr ""
+msgstr "當前設定"
 
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">This is the default if you run DDNS scripts by yourself (i.e. via cron with "
 "force_interval set to '0')"
 msgstr ""
+"現在,DDNS 更新在開機或者介面動作時不會被觸發。<br />如果您手工執行 DDNS 指令碼"
+"的話(例如使用 cron 時把 force_interval 設定為 0),這是預設設定。"
 
 msgid ""
 "Currently DDNS updates are not started at boot or on interface events.<br /"
 ">You can start/stop each configuration here. It will run until next reboot."
 msgstr ""
+"現在,DDNS 更新在開機或者介面動作時不會被觸發。<br />您可以在這裡開始/停止每"
+"一個設定的條目。它在下次重啟之前一直有效。"
 
 msgid "Custom update script to be used for updating your DDNS Provider."
-msgstr ""
+msgstr "用來更新動態 DNS 的自定義指令碼。"
 
 msgid "Custom update-URL"
-msgstr "自訂更新的URL"
+msgstr "自定義更新 URL"
 
 msgid "Custom update-script"
-msgstr ""
+msgstr "自定義更新指令碼"
 
 msgid "DDNS Autostart disabled"
-msgstr ""
+msgstr "DDNS 自動啟動已禁用。"
 
 msgid "DDNS Client Configuration"
-msgstr ""
+msgstr "DDNS 客戶端配置"
 
 msgid "DDNS Client Documentation"
-msgstr ""
+msgstr "DDNS 客戶端文件"
 
 msgid "DDNS Service provider"
-msgstr ""
+msgstr "DDNS 服務提供商"
 
 msgid "DNS requests via TCP not supported"
-msgstr ""
+msgstr "不支援使用 TCP 進行 DNS 解析"
 
 msgid "DNS-Server"
-msgstr ""
+msgstr "DNS-伺服器"
 
 msgid "Date format"
-msgstr ""
+msgstr "日期格式"
 
 msgid "Defines the Web page to read systems IPv4-Address from"
-msgstr ""
+msgstr "設定用來讀取系統 IPv4 位址的網頁"
 
 msgid "Defines the Web page to read systems IPv6-Address from"
-msgstr ""
+msgstr "設定用來讀取系統 IPv6 位址的網頁"
 
 msgid "Defines the interface to read systems IP-Address from"
-msgstr ""
+msgstr "設定用來讀取系統 IP 位址的介面"
 
 msgid "Defines the network to read systems IPv4-Address from"
-msgstr ""
+msgstr "設定用來讀取系統 IPv4 位址的網路"
 
 msgid "Defines the network to read systems IPv6-Address from"
-msgstr ""
+msgstr "設定用來讀取系統 IPv6 位址的網路"
 
 msgid ""
 "Defines the source to read systems IPv4-Address from, that will be send to "
 "the DDNS provider"
-msgstr ""
+msgstr "設定 IPv4 位址的來源。這將會被髮送給 DDNS 提供商"
 
 msgid ""
 "Defines the source to read systems IPv6-Address from, that will be send to "
 "the DDNS provider"
-msgstr ""
+msgstr "設定 IPv6 位址的來源。這將會被髮送給 DDNS 提供商"
 
 msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
-msgstr ""
+msgstr "設定哪一個 IP 位址(IPv4 或 IPv6)會被髮送給 DDNS 提供商"
 
 msgid "Details for"
-msgstr ""
+msgstr "詳情"
 
 msgid "Directory contains Log files for each running section"
-msgstr ""
+msgstr "儲存每一個執行中的設定的執行日誌的目錄"
 
 msgid ""
 "Directory contains PID and other status information for each running section"
-msgstr ""
+msgstr "儲存每個執行中的設定的PID以及其它狀態資訊的目錄"
 
 msgid "Disabled"
-msgstr ""
+msgstr "已禁用"
 
 msgid "Domain"
-msgstr ""
+msgstr "域名"
 
 msgid "Dynamic DNS"
-msgstr "動態DNS"
+msgstr "動態 DNS"
 
 msgid ""
 "Dynamic DNS allows that your router can be reached with a fixed hostname "
 "while having a dynamically changing IP address."
-msgstr ""
-"動態DNS允許為主機配置一個固定的網域名稱,但該網路名稱卻是對應到動態的IP位置"
+msgstr "動態 DNS 允許為擁有動態 IP 的主機配置一個固定的可訪問域名。"
 
 msgid "Enable secure communication with DDNS provider"
-msgstr ""
+msgstr "啟用安全連線與 DDNS 提供商聯絡"
 
 msgid "Enabled"
-msgstr ""
+msgstr "已啟用"
 
 msgid "Error"
-msgstr ""
+msgstr "錯誤"
 
 msgid "Error Retry Counter"
-msgstr ""
+msgstr "錯誤重試計數"
 
 msgid "Error Retry Interval"
-msgstr ""
+msgstr "錯誤重試間隔"
 
 msgid "Event Network"
-msgstr ""
+msgstr "事件網路"
 
 msgid "File"
-msgstr ""
+msgstr "檔案"
 
 msgid "File not found"
-msgstr ""
+msgstr "檔案未找到"
 
 msgid "File not found or empty"
-msgstr ""
+msgstr "檔案未找到或為空"
 
 msgid ""
 "Follow this link<br />You will find more hints to optimize your system to "
 "run DDNS scripts with all options"
 msgstr ""
+"開啟這個連結<br />您將會得到更多關於如何通過所有設定項優化您的系統以執行 "
+"DDNS 指令碼的提示"
 
 msgid "For detailed information about parameter settings look here."
-msgstr ""
+msgstr "請看這裡獲得關於引數設定的詳細資訊"
 
 msgid "For supported codes look here"
-msgstr ""
+msgstr "檢視這裡獲取支援的編碼"
 
 msgid "Force IP Version"
-msgstr ""
+msgstr "強制設定 IP 版本"
 
 msgid "Force IP Version not supported"
-msgstr ""
+msgstr "不支援強制設定 IP 版本"
 
 msgid "Force Interval"
-msgstr ""
+msgstr "設定週期"
 
 msgid "Force TCP on DNS"
-msgstr ""
+msgstr "強制使用 TCP 進行 DNS 查詢"
 
 msgid "Forced IP Version don't matched"
-msgstr ""
+msgstr "強制設定的 IP 版本不匹配"
 
 msgid "Format"
-msgstr ""
+msgstr "格式"
 
 msgid "Format: IP or FQDN"
-msgstr ""
+msgstr "格式:IP 或者 FQDN"
 
 msgid ""
 "GNU Wget will use the IP of given network, cURL will use the physical "
 "interface."
-msgstr ""
+msgstr "GNU Wget 將會使用給定的網路的 IP 位址,而 cURL 將會使用物理介面。"
 
 msgid "Global Settings"
-msgstr ""
+msgstr "全域性設定"
 
 msgid "HTTPS not supported"
-msgstr ""
+msgstr "不支援 HTTPS"
 
 msgid "Hints"
-msgstr ""
+msgstr "提示"
 
 msgid "Hostname/FQDN to validate, if IP update happen or necessary"
-msgstr ""
+msgstr "主機名/FQDN 驗證,如果 IP 更新發生或必要"
 
 msgid "IP address source"
-msgstr ""
+msgstr "IP 位址來源"
 
 msgid "IP address version"
-msgstr ""
+msgstr "IP 位址版本"
 
 msgid "IPv4-Address"
-msgstr ""
+msgstr "IPv4 位址"
 
 msgid "IPv6 address must be given in square brackets"
-msgstr ""
+msgstr "IPv6 位址必須填寫在中括號(\"[  ]\")內"
 
 msgid ""
 "IPv6 is currently not (fully) supported by this system<br />Please follow "
 "the instructions on OpenWrt's homepage to enable IPv6 support<br />or update "
 "your system to the latest OpenWrt Release"
 msgstr ""
+"當前系統暫時不能(完整地)支援 IPv6<br />請檢視 OpenWrt 首頁的介紹以啟用 "
+"IPv6 支援<br />或者更新您的系統到最新 OpenWrt 版本"
 
 msgid "IPv6 not supported"
-msgstr ""
+msgstr "IPv6 不被支援"
 
 msgid "IPv6-Address"
-msgstr ""
+msgstr "IPv6 位址"
 
 msgid "If both cURL and GNU Wget are installed, Wget is used by default."
-msgstr ""
+msgstr "如果 cURL 和 GNU Wget 同時被安裝,那麼 Wget 將會被優先使用。"
 
 msgid ""
 "If this service section is disabled it could not be started.<br />Neither "
 "from LuCI interface nor from console"
 msgstr ""
+"如果服務配置被禁用,那麼它將不能被啟動。<br />無論是通過 LuCI 頁面或者是通過"
+"終端。"
 
 msgid "If using secure communication you should verify server certificates!"
-msgstr ""
+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 ""
+"如果您需要同時更新 IPv4 和 IPv6 位址,您需要單獨新增兩個配置項(例"
+"如'myddns_ipv4'和'myddns_ipv6')"
 
 msgid ""
 "In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
-msgstr ""
+msgstr "OpenWrt 中,cURL/libcurl 的某些版本編譯時沒有啟用代理伺服器支援"
 
 msgid "Info"
-msgstr ""
+msgstr "資訊"
 
 msgid ""
 "Install 'ca-certificates' package or needed certificates by hand into /etc/"
 "ssl/certs default directory"
 msgstr ""
+"手動將“ca-certificates”包或需要的證書安裝到 /etc/ssl/certs 的預設目錄中"
 
 msgid "Interface"
-msgstr "面"
+msgstr "面"
 
 msgid ""
 "Interval to check for changed IP<br />Values below 5 minutes == 300 seconds "
 "are not supported"
-msgstr ""
+msgstr "檢查 IP 是否改變的時間隔<br />不支援小於 5 分鐘(300 秒)的數值。"
 
 msgid ""
 "Interval to force updates send to DDNS Provider<br />Setting this parameter "
 "to 0 will force the script to only run once<br />Values lower 'Check "
 "Interval' except '0' are not supported"
 msgstr ""
+"強制向提供商更新 DDNS 的時間週期<br />將這個引數設定為 0 則會讓指令碼僅執行一次"
+"<br />不支援小於\"檢查時間週期\"的數值(除了 0)。"
 
 msgid "It is NOT recommended for casual users to change settings on this page."
-msgstr ""
+msgstr "強烈不建議初次使用的使用者修改本頁設定。"
 
 msgid "Last Update"
-msgstr ""
+msgstr "上次更新"
 
 msgid "Loading"
-msgstr ""
+msgstr "載入中"
 
 msgid "Log File Viewer"
-msgstr ""
+msgstr "日誌檢視器"
 
 msgid "Log directory"
-msgstr ""
+msgstr "日誌目錄"
 
 msgid "Log length"
-msgstr ""
+msgstr "日誌長度"
 
 msgid "Log to file"
-msgstr ""
+msgstr "把日誌記錄到檔案"
 
 msgid "Log to syslog"
-msgstr ""
+msgstr "把日誌記錄到系統日誌"
 
 msgid "Lookup Hostname"
-msgstr ""
+msgstr "查詢主機名"
 
 msgid "NOT installed"
-msgstr ""
+msgstr "未安裝"
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to select a network to use for "
 "communication."
-msgstr ""
+msgstr "包含 SSL 支援的 GNU Wget 或者 cURL 均未安裝,無法選擇網路用於通訊。"
 
 msgid ""
 "Neither GNU Wget with SSL nor cURL installed to support secure updates via "
 "HTTPS protocol."
 msgstr ""
+"包含 SSL 支援的 GNU Wget 或者 cURL 均未安裝,無法通過 HTTPS 協議進行安全的更"
+"新。"
 
 msgid "Network"
 msgstr "網路"
 
 msgid "Network on which the ddns-updater scripts will be started"
-msgstr ""
+msgstr "DDNS 更新指令碼將會運行於該網路"
 
 msgid "Never"
-msgstr ""
+msgstr "從不"
 
 msgid "Next Update"
-msgstr ""
+msgstr "下次更新"
 
 msgid "No certificates found"
-msgstr ""
+msgstr "找不到證書"
 
 msgid "No data"
-msgstr ""
+msgstr "無資料"
 
 msgid "No logging"
-msgstr ""
+msgstr "無日誌"
 
 msgid "Non-public and by default blocked IP's"
-msgstr ""
+msgstr "非公網 IP 以及預設被鎖定的 IP"
 
 msgid "Notice"
-msgstr ""
+msgstr "提示"
 
 msgid "Number of last lines stored in log files"
-msgstr ""
+msgstr "日誌檔案中的最後幾行"
 
 msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
-msgstr ""
+msgstr "可選:強制僅使用 IPv4/IPv6 通訊。"
 
 msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
-msgstr ""
+msgstr "可選:強制使用 TCP 而非 UDP 請求 DNS。"
 
 msgid "OPTIONAL: Network to use for communication"
-msgstr ""
+msgstr "可選:用於通訊的網路"
 
 msgid "OPTIONAL: Proxy-Server for detection and updates."
-msgstr ""
+msgstr "可選:用於檢測以及更新的代理伺服器。"
 
 msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
-msgstr ""
+msgstr "可選:使用非預設 DNS 伺服器檢測\"已註冊的 IP 位址\"。"
 
 msgid "On Error the script will retry the failed action after given time"
-msgstr ""
+msgstr "當出錯時,指令碼將會重試失敗的動作的次數"
 
 msgid "On Error the script will stop execution after given number of retrys"
-msgstr ""
+msgstr "當出錯時,指令碼將會重試該次數之後退出"
 
 msgid "OpenWrt Wiki"
-msgstr ""
+msgstr "OpenWrt Wiki"
 
 msgid "Optional Encoded Parameter"
-msgstr ""
+msgstr "可選編碼引數"
 
 msgid "Optional Parameter"
-msgstr ""
+msgstr "可選引數"
 
 msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "可選:替換更新 URL(已編碼 URL)中的 [PARAMENC]"
 
 msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
-msgstr ""
+msgstr "可選:替換更新 URL(未編碼 URL)中的 [PARAMENC]"
 
 msgid "Overview"
-msgstr ""
+msgstr "總覽"
 
 msgid "PROXY-Server"
-msgstr ""
+msgstr "代理伺服器"
 
 msgid "PROXY-Server not supported"
-msgstr ""
+msgstr "不支援代理伺服器"
 
 msgid "Password"
 msgstr "密碼"
 
 msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "CA 證書路徑"
 
 msgid "Please [Save & Apply] your changes first"
-msgstr ""
+msgstr "請先儲存並應用您的設定"
 
 msgid "Please press [Read] button"
-msgstr ""
+msgstr "請按下\"讀取\"按鈕"
 
 msgid "Please update to the current version!"
-msgstr ""
+msgstr "請更新到最新版本!"
 
 msgid "Process ID"
-msgstr ""
+msgstr "程序 ID"
 
 msgid "Read / Reread log file"
-msgstr ""
+msgstr "讀取/重新讀取日誌檔案"
 
 msgid "Really change DDNS provider?"
-msgstr ""
+msgstr "確定更改 DDNS 提供商嗎?"
 
 msgid "Registered IP"
-msgstr ""
+msgstr "已註冊的 IP 位址"
 
 msgid "Replaces [DOMAIN] in Update-URL"
-msgstr ""
+msgstr "替換更新 URL 中的 [DOMAIN]"
 
 msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "替換更新 URL(已編碼 URL)中的 [PASSWORD]"
 
 msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
-msgstr ""
+msgstr "替換更新 URL(已編碼 URL)中的 [USERNAME]"
 
 msgid "Run once"
-msgstr ""
+msgstr "執行一次"
 
 msgid "Script"
-msgstr ""
+msgstr "指令碼"
 
 msgid "Show more"
-msgstr ""
+msgstr "檢視更多"
 
 msgid "Software update required"
-msgstr ""
+msgstr "需要進行軟體更新"
 
 msgid "Specifying a DNS-Server is not supported"
-msgstr ""
+msgstr "不支援指定 DNS 伺服器"
 
 msgid "Start"
-msgstr ""
+msgstr "啟動"
 
 msgid "Start / Stop"
-msgstr ""
+msgstr "啟動 / 停止"
 
 msgid "Status directory"
-msgstr ""
+msgstr "狀態目錄"
 
 msgid "Stopped"
-msgstr ""
+msgstr "已停止"
 
 msgid ""
 "The currently installed 'ddns-scripts' package did not support all available "
 "settings."
-msgstr ""
+msgstr "當前已安裝的'ddns-scripts'軟體包暫不支援所有可用設定項"
 
 msgid "The default setting of '0' will retry infinite."
-msgstr ""
+msgstr "預設設定“0”將無限重試。"
 
 msgid "There is no service configured."
-msgstr ""
+msgstr "沒有已經配置好的服務項"
 
 msgid "Timer Settings"
-msgstr ""
+msgstr "計時器設定"
 
 msgid "To change global settings click here"
-msgstr ""
+msgstr "點選這裡更改全域性設定"
 
 msgid "To use cURL activate this option."
-msgstr ""
+msgstr "選中此項以使用 cURL"
 
 msgid "URL"
 msgstr "URL"
 
 msgid "URL to detect"
-msgstr ""
+msgstr "用於檢測的 URL"
 
 msgid "Unknown error"
-msgstr ""
+msgstr "未知錯誤"
 
 msgid ""
 "Update URL to be used for updating your DDNS Provider.<br />Follow "
 "instructions you will find on their WEB page."
 msgstr ""
+"DDNS 提供商用於更新 DDNS 的 URL。<br />跟隨教程,您可以在它們的網站上找到這"
+"個 URL。"
 
 msgid "Update error"
-msgstr ""
+msgstr "更新錯誤"
 
 msgid "Use HTTP Secure"
-msgstr ""
+msgstr "使用 HTTPS"
 
 msgid "Use cURL"
-msgstr ""
+msgstr "使用 cURL"
 
 msgid "User defined script to read systems IP-Address"
-msgstr ""
+msgstr "使用設定的指令碼來讀取系統 IP 位址"
 
 msgid "Username"
 msgstr "使用者名稱"
 
 msgid "Using specific DNS Server not supported"
-msgstr ""
+msgstr "不支援使用特定的 DNS 伺服器"
 
 msgid "Verify"
-msgstr ""
+msgstr "驗證"
 
 msgid "Version"
-msgstr ""
+msgstr "版本"
 
 msgid "Version Information"
-msgstr ""
+msgstr "版本資訊"
 
 msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "正在應用更改..."
 
 msgid "Warning"
-msgstr ""
+msgstr "等待"
 
 msgid ""
 "Writes detailed messages to log file. File will be truncated automatically."
-msgstr ""
+msgstr "向日志中寫入詳細資訊。檔案將自動縮小。"
 
 msgid ""
 "Writes log messages to syslog. Critical Errors will always be written to "
 "syslog."
-msgstr ""
+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 ""
+"如果您需要指定 DNS 伺服器來檢測您註冊的 IP,您應該安裝“bind-host”或“knot-"
+"host”或“drill”或“hostip”軟體包。"
 
 msgid ""
 "You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
 "requests."
-msgstr ""
+msgstr "您應該為 DNS 請求安裝“bind-host”或“knot-host”或“drill”軟體包。"
 
 msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
-msgstr ""
+msgstr "您應該安裝“wget”或“curl”或“uclient-fetch”軟體包。"
 
 msgid ""
 "You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
 "*ssl' package."
-msgstr ""
+msgstr "您應該安裝“wget”或“curl”或“uclient-fetch”,及“libustream-*ssl”軟體包。"
 
 msgid "You should install 'wget' or 'curl' package."
-msgstr ""
+msgstr "您應該安裝“wget”或“curl”軟體包。"
 
 msgid ""
 "You should install 'wget' or 'uclient-fetch' package or replace libcurl."
-msgstr ""
+msgstr "您應該安裝“wget”或“uclient-fetch”軟體包,或替換 libcurl。"
 
 msgid "cURL is installed, but libcurl was compiled without proxy support."
-msgstr ""
+msgstr "cURL 已經安裝,但是 libcurl 編譯時沒有啟用代理支援。"
 
 msgid "cURL without Proxy Support"
-msgstr ""
+msgstr "cURL 沒有包含代理支援"
 
 msgid "can not detect local IP. Please select a different Source combination"
-msgstr ""
+msgstr "無法確定本地 IP。請更換 IP 來源。"
 
 msgid "can not resolve host:"
-msgstr ""
+msgstr "無法解析主機:"
 
 msgid "config error"
-msgstr ""
+msgstr "配置錯誤"
 
 msgid "days"
-msgstr ""
+msgstr ""
 
 msgid "directory or path/file"
-msgstr ""
+msgstr "目錄或者到檔案的路徑"
 
 msgid "either url or script could be set"
-msgstr ""
+msgstr "接受 URL 或者指令碼"
 
 msgid "enable here"
-msgstr ""
+msgstr "在這裡啟用"
 
 msgid "file or directory not found or not 'IGNORE'"
-msgstr ""
+msgstr "檔案或目錄未找到或未\"被忽視\""
 
 msgid "help"
-msgstr ""
+msgstr "幫助"
 
 msgid "hours"
-msgstr ""
+msgstr "小時"
 
 msgid "installed"
-msgstr ""
+msgstr "已安裝"
 
 msgid "invalid FQDN / required - Sample"
-msgstr ""
+msgstr "FQDN 無效 / 必需 - 示例"
 
 msgid "minimum value '0'"
-msgstr ""
+msgstr "最小值 0"
 
 msgid "minimum value '1'"
-msgstr ""
+msgstr "最小值 1"
 
 msgid "minimum value 5 minutes == 300 seconds"
-msgstr ""
+msgstr "最小值為 5 分鐘(300 秒)"
 
 msgid "minutes"
-msgstr ""
+msgstr "分鐘"
 
 msgid "missing / required"
-msgstr ""
+msgstr "必須填寫"
 
 msgid "must be greater or equal 'Check Interval'"
-msgstr ""
+msgstr "必須大於或等於\"檢查時間週期\""
 
 msgid "must start with 'http://'"
-msgstr ""
+msgstr "必須以'http://'開頭"
 
 msgid "nc (netcat) can not connect"
-msgstr ""
+msgstr "nc(netcat)不可連線"
 
 msgid "never"
-msgstr ""
+msgstr "從不"
 
 msgid "no data"
-msgstr ""
+msgstr "無資料"
 
 msgid "not found or not executable - Sample: '/path/to/script.sh'"
-msgstr ""
+msgstr "未找到或者不可執行 - 示例:“/path/to/script.sh”"
 
 msgid "nslookup can not resolve host"
-msgstr ""
+msgstr "nslookup 不能解析主機"
 
 msgid "or"
-msgstr ""
+msgstr "或者"
 
 msgid "or higher"
-msgstr ""
+msgstr "或者更大"
 
 msgid "please disable"
-msgstr ""
+msgstr "請禁用"
 
 msgid "please remove entry"
-msgstr ""
+msgstr "請移除該欄位"
 
 msgid "please select 'IPv4' address version"
-msgstr ""
+msgstr "請設定 IPv4 位址"
 
 msgid "please select 'IPv4' address version in"
-msgstr ""
+msgstr "請設定 IPv4 位址於"
 
 msgid "please set to 'default'"
-msgstr ""
+msgstr "請設定為\"預設\""
 
 msgid "proxy port missing"
-msgstr ""
+msgstr "代理埠未填"
 
 msgid "required"
-msgstr ""
+msgstr "必須填寫"
 
 msgid "seconds"
-msgstr ""
+msgstr ""
 
 msgid "to run HTTPS without verification of server certificates (insecure)"
-msgstr ""
+msgstr "使用 HTTPS 但不檢查伺服器證書(不安全)"
 
 msgid "unknown error"
-msgstr ""
+msgstr "未知錯誤"
 
 msgid "unspecific error"
-msgstr ""
+msgstr "未指定的錯誤"
 
 msgid "use hostname, FQDN, IPv4- or IPv6-Address"
-msgstr ""
+msgstr "使用主機名或 IPv4/IPv6 位址"
+
+#~ msgid ""
+#~ "Neither GNU Wget with SSL nor cURL installed to support updates via HTTPS "
+#~ "protocol."
+#~ msgstr "包含SSL支援的GNU Wget或者cURL均未被安裝.無法使用HTTPS更新DDNS"
+
+#~ msgid "You should install BIND host package for DNS requests."
+#~ msgstr "您需要安裝BIND以請求DNS記錄."
+
+#~ msgid "You should install GNU Wget with SSL (preferred) or cURL package."
+#~ msgstr "您需要安裝包含SSL支援的GNU Wget(推薦)或是cURL軟體包."
+
+#~ msgid "You should install GNU Wget with SSL or cURL package."
+#~ msgstr "您需要安裝包含SSL支援的GNU Wget或是cURL軟體包."
+
+#~ msgid "You should install GNU Wget with SSL or replace libcurl."
+#~ msgstr "您需要安裝包含SSL支援的GNU Wget或替換libcurl."
index dd0a81a..c314332 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 3cb3169..2d62488 100644 (file)
@@ -20,14 +20,14 @@ msgstr "診斷"
 msgid ""
 "The diagnostics available under this menu depend on what modules you have "
 "installed on your device."
-msgstr "這選單下的診斷機制可運用性, 端看設備上已安裝的模組而定"
+msgstr "這選單下的診斷機制可運用性, 端看設備上已安裝的模組而定"
 
 msgid ""
 "The entries in the menu allow you to perform diagnostic tests on your system "
 "to aid in troubleshooting."
-msgstr "選單內的項目允許在系統內執行診斷測試以便解決疑難雜症"
+msgstr "選單內的項目允許在系統內執行診斷測試以便解決疑難雜症"
 
 msgid ""
 "With this menu you can configure network diagnostics, such as network device "
 "scans and ping tests."
-msgstr "採用這選項可以讓設定網路診斷, 例如網路設備掃描跟ping的測試."
+msgstr "採用這選項可以讓設定網路診斷, 例如網路設備掃描跟ping的測試."
index cf74fbc..d68116b 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -10,22 +10,22 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 msgid "Actions"
-msgstr ""
+msgstr "Åtgärder"
 
 msgid "Add"
-msgstr ""
+msgstr "Lägg till"
 
 msgid "Beginning of MAC address range"
-msgstr ""
+msgstr "Början av räckvidd för MAC-adress"
 
 msgid "Config Phone Scan"
-msgstr ""
+msgstr "Konfigurera skanning av telefon"
 
 msgid "Configure"
-msgstr ""
+msgstr "Konfigurera"
 
 msgid "Configure Scans"
-msgstr ""
+msgstr "Konfigurera skanningar"
 
 msgid ""
 "Configure scanning for devices on specified networks. Decreasing 'Timeout', "
@@ -40,46 +40,46 @@ msgid ""
 msgstr ""
 
 msgid "Delete"
-msgstr ""
+msgstr "Radera"
 
 msgid "Device Scan Config"
 msgstr ""
 
 msgid "Device Type"
-msgstr ""
+msgstr "Enhetstyp"
 
 msgid "Devices discovered for"
 msgstr ""
 
 msgid "Devices on Network"
-msgstr ""
+msgstr "Enheter på nätverket"
 
 msgid "Edit"
-msgstr ""
+msgstr "Redigera"
 
 msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
 
 msgid "End of MAC address range"
 msgstr ""
 
 msgid "Go to relevant configuration page"
-msgstr ""
+msgstr "Gå till relevant konfigurationssida"
 
 msgid "IP Address"
-msgstr ""
+msgstr "IP-adress"
 
 msgid "Interface"
-msgstr ""
+msgstr "Gränssnitt"
 
 msgid "Invalid"
-msgstr ""
+msgstr "Ogiltig"
 
 msgid "Link to Device"
-msgstr ""
+msgstr "Länka till enhet"
 
 msgid "MAC Address"
-msgstr ""
+msgstr "MAC-adress"
 
 msgid "MAC Device Info Overrides"
 msgstr ""
@@ -91,13 +91,13 @@ msgid "MAC range and information used to override system and IEEE databases"
 msgstr ""
 
 msgid "Milliseconds to sleep between requests (default 100)"
-msgstr ""
+msgstr "Millisekunder att sova mellan förfrågningar (100 är standard)"
 
 msgid "Model"
-msgstr ""
+msgstr "Modell"
 
 msgid "Name"
-msgstr ""
+msgstr "Namn"
 
 msgid "Network Device Scan"
 msgstr ""
@@ -106,22 +106,22 @@ msgid "Network Device Scanning Configuration"
 msgstr ""
 
 msgid "Networks to scan for devices"
-msgstr ""
+msgstr "Nätverk att skanna efter enheter i"
 
 msgid "Networks to scan for supported devices"
-msgstr ""
+msgstr "Nätverk att skanna efter enheter som stöds"
 
 msgid "No SIP devices"
-msgstr ""
+msgstr "Inga SIP-enheter"
 
 msgid "No devices detected"
-msgstr ""
+msgstr "Upptäckte inga enheter"
 
 msgid "Number of times to send requests (default 1)"
-msgstr ""
+msgstr "Antalet gånger att skicka förfrågningar (1 är standard)"
 
 msgid "OUI Owner"
-msgstr ""
+msgstr "OUI-ägare"
 
 msgid ""
 "Override the information returned by the MAC to Device Info Script (mac-to-"
@@ -129,79 +129,79 @@ msgid ""
 msgstr ""
 
 msgid "Perform Scans (this can take a few minutes)"
-msgstr ""
+msgstr "Utför skanningar (det här kan ta ett par minuter)"
 
 msgid "Phone Information"
-msgstr ""
+msgstr "Information om telefon"
 
 msgid "Phone Scan"
-msgstr ""
+msgstr "Skanna telefon"
 
 msgid "Phone Scanning Configuration"
-msgstr ""
+msgstr "Konfiguration av skanning i telefon"
 
 msgid "Phones"
-msgstr ""
+msgstr "Telefoner"
 
 msgid "Ports"
-msgstr ""
+msgstr "Portar"
 
 msgid "Raw"
-msgstr ""
+msgstr ""
 
 msgid "Repeat Count"
 msgstr ""
 
 msgid "Repeat Scans (this can take a few minutes)"
-msgstr ""
+msgstr "Repetera skanningar (det här kan ta några minuter)"
 
 msgid "SIP Device Information"
-msgstr ""
+msgstr "Information om SIP-enhet"
 
 msgid "SIP Device Scan"
 msgstr ""
 
 msgid "SIP Device Scanning Configuration"
-msgstr ""
+msgstr "Skanningskonfiguration för SIP-enhet"
 
 msgid "SIP Devices on Network"
-msgstr ""
+msgstr "SIP-enheter på nätverk"
 
 msgid "SIP devices discovered for"
-msgstr ""
+msgstr "Upptäckta SIP-enheter för"
 
 msgid "Scan for devices on specified networks."
-msgstr ""
+msgstr "Skanna efter enheter i angivna nätverk."
 
 msgid "Scan for supported SIP devices on specified networks."
-msgstr ""
+msgstr "Skannar efter SIP-enheter som stöds i angivna nätverk."
 
 msgid "Scanning Configuration"
-msgstr ""
+msgstr "Skannar konfiguration"
 
 msgid "Scans for devices on specified networks."
-msgstr ""
+msgstr "Skannar efter enheter i angivna nätverk."
 
 msgid "Sleep Between Requests"
-msgstr ""
+msgstr "Sov mellan förfrågningar"
 
 msgid "Subnet"
-msgstr ""
+msgstr "Subnät"
 
 msgid "This section contains no values yet"
-msgstr ""
+msgstr "Den här sektionen innehåller inga värden än"
 
 msgid "Time to wait for responses in seconds (default 10)"
-msgstr ""
+msgstr "Tid att vänta på svar i sekunder (standard 10)"
 
 msgid "Timeout"
-msgstr ""
+msgstr "Avbrott"
 
 msgid "Use Configuration"
-msgstr ""
+msgstr "Använd konfiguration"
 
 msgid "Vendor"
-msgstr ""
+msgstr "Tillverkare"
 
 msgid "check other networks"
-msgstr ""
+msgstr "kolla andra nätverk"
diff --git a/applications/luci-app-dnscrypt-proxy/Makefile b/applications/luci-app-dnscrypt-proxy/Makefile
new file mode 100644 (file)
index 0000000..4b632b8
--- /dev/null
@@ -0,0 +1,13 @@
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for DNSCrypt-Proxy
+LUCI_DEPENDS:=+uclient-fetch +dnscrypt-proxy
+LUCI_PKGARCH:=all
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua b/applications/luci-app-dnscrypt-proxy/luasrc/controller/dnscrypt-proxy.lua
new file mode 100644 (file)
index 0000000..9f6472e
--- /dev/null
@@ -0,0 +1,38 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+module("luci.controller.dnscrypt-proxy", package.seeall)
+
+local util  = require("luci.util")
+local i18n  = require("luci.i18n")
+local templ = require("luci.template")
+
+function index()
+       if not nixio.fs.access("/etc/config/dnscrypt-proxy") then
+               nixio.fs.writefile("/etc/config/dnscrypt-proxy", "")
+       end
+       entry({"admin", "services", "dnscrypt-proxy"}, firstchild(), _("DNSCrypt-Proxy"), 60).dependent = false
+       entry({"admin", "services", "dnscrypt-proxy", "tab_from_cbi"}, cbi("dnscrypt-proxy/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+       entry({"admin", "services", "dnscrypt-proxy", "logfile"}, call("logread"), _("View Logfile"), 20).leaf = true
+       entry({"admin", "services", "dnscrypt-proxy", "advanced"}, firstchild(), _("Advanced"), 100)
+       entry({"admin", "services", "dnscrypt-proxy", "advanced", "configuration"}, cbi("dnscrypt-proxy/configuration_tab"), _("Edit DNSCrypt-Proxy Configuration"), 110).leaf = true
+       entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_dnsmasq"}, cbi("dnscrypt-proxy/cfg_dnsmasq_tab"), _("Edit Dnsmasq Configuration"), 120).leaf = true
+       entry({"admin", "services", "dnscrypt-proxy", "advanced", "cfg_resolvcrypt"}, cbi("dnscrypt-proxy/cfg_resolvcrypt_tab"), _("Edit Resolvcrypt Configuration"), 130).leaf = true
+       entry({"admin", "services", "dnscrypt-proxy", "advanced", "view_reslist"}, call("view_reslist"), _("View Resolver List"), 140).leaf = true
+end
+
+function view_reslist()
+       local reslist = util.trim(util.exec("cat /usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"))
+       templ.render("dnscrypt-proxy/view_reslist", {title = i18n.translate("DNSCrypt-Proxy Resolver List"), content = reslist})
+end
+
+function logread()
+       local logfile
+
+       if nixio.fs.access("/var/log/messages") then
+               logfile = util.trim(util.exec("cat /var/log/messages | grep 'dnscrypt-proxy'"))
+       else
+               logfile = util.trim(util.exec("logread -e 'dnscrypt-proxy'"))
+       end
+       templ.render("dnscrypt-proxy/logread", {title = i18n.translate("DNSCrypt-Proxy Logfile"), content = logfile})
+end
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_dnsmasq_tab.lua
new file mode 100644 (file)
index 0000000..6e75ac9
--- /dev/null
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs      = require("nixio.fs")
+local util      = require("luci.util")
+local uci_input = "/etc/config/dhcp"
+
+if not nxfs.access(uci_input) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main Dnsmasq configuration file (/etc/config/dhcp)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+       return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/cfg_resolvcrypt_tab.lua
new file mode 100644 (file)
index 0000000..f172b15
--- /dev/null
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs      = require("nixio.fs")
+local util      = require("luci.util")
+local res_input = "/etc/resolv-crypt.conf"
+
+if not nxfs.access(res_input) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the resolv-crypt configuration file (/etc/resolv-crypt.conf)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nxfs.readfile(res_input) or ""
+end
+
+function f.write(self, section, data)
+       return nxfs.writefile(res_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/configuration_tab.lua
new file mode 100644 (file)
index 0000000..f184273
--- /dev/null
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local nxfs      = require("nixio.fs")
+local util      = require("luci.util")
+local uci_input = "/etc/config/dnscrypt-proxy"
+
+if not nxfs.access(uci_input) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("dnscrypt-proxy/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main DNSCrypt-Proxy configuration file (/etc/config/dnscrypt-proxy)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nxfs.readfile(uci_input) or ""
+end
+
+function f.write(self, section, data)
+       return nxfs.writefile(uci_input, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua b/applications/luci-app-dnscrypt-proxy/luasrc/model/cbi/dnscrypt-proxy/overview_tab.lua
new file mode 100644 (file)
index 0000000..368c667
--- /dev/null
@@ -0,0 +1,245 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs        = require("nixio.fs")
+local uci       = require("luci.model.uci").cursor()
+local util      = require("luci.util")
+local date      = require("luci.http.protocol.date")
+local res_input = "/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv"
+local dump      = util.ubus("network.interface", "dump", {})
+local plug_cnt  = tonumber(luci.sys.exec("env -i /usr/sbin/dnscrypt-proxy --version | grep 'Support for plugins: present' | wc -l"))
+local res_list  = {}
+local url       = "https://download.dnscrypt.org/dnscrypt-proxy/dnscrypt-resolvers.csv"
+
+if not fs.access(res_input) then
+       if not fs.access("/lib/libustream-ssl.so") then
+               m = SimpleForm("error", nil, translate("No default resolver list and no SSL support available.<br />")
+                       .. translate("Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-resolvers.csv' to use this package."))
+               m.submit = false
+               m.reset = false
+               return m
+       else
+               luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+       end
+end
+
+if not uci:get_first("dnscrypt-proxy", "global") then
+       uci:add("dnscrypt-proxy", "global")
+       uci:save("dnscrypt-proxy")
+       uci:commit("dnscrypt-proxy")
+end
+
+for line in io.lines(res_input) do
+       local name,
+       location,
+       dnssec,
+       nolog = line:match("^([^,]+),.-,\".-\",\"*(.-)\"*,.-,[0-9],\"*([yesno]+)\"*,\"*([yesno]+)\"*,.*")
+       if name ~= "" and name ~= "Name" then
+               if location == "" then
+                       location = "-"
+               end
+               if dnssec == "" then
+                       dnssec = "-"
+               end
+               if nolog == "" then
+                       nolog = "-"
+               end
+               res_list[#res_list + 1] = { name = name, location = location, dnssec = dnssec, nolog = nolog }
+       end
+end
+
+m = Map("dnscrypt-proxy", translate("DNSCrypt-Proxy"),
+       translate("Configuration of the DNSCrypt-Proxy package. ")
+       .. translatef("For further information "
+       .. "<a href=\"%s\" target=\"_blank\">"
+       .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+m:chain("dhcp")
+
+function m.on_after_commit(self)
+       function d1.validate(self, value, s1)
+               if value == "1" then
+                       uci:commit("dnscrypt-proxy")
+                       uci:set("dhcp", s1, "noresolv", 1)
+                       if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then
+                               uci:set("dhcp", s1, "resolvfile", "/tmp/resolv.conf.auto")
+                       else
+                               uci:set("dhcp", s1, "resolvfile", "/etc/resolv-crypt.conf")
+                       end
+                       local server_list = {}
+                       local cnt = 1
+                       uci:foreach("dnscrypt-proxy", "dnscrypt-proxy", function(s)
+                               server_list[cnt] = s['address'] .. "#" .. s['port']
+                               cnt = cnt + 1
+                       end)
+                       server_list[cnt] = "/pool.ntp.org/8.8.8.8"
+                       uci:set_list("dhcp", s1, "server", server_list)
+                       if cnt > 2 then
+                               uci:set("dhcp", s1, "allservers", 1)
+                       else
+                               uci:set("dhcp", s1, "allservers", 0)
+                       end
+                       uci:save("dhcp")
+                       uci:commit("dhcp")
+               end
+               return value
+       end
+       luci.sys.call("env -i /etc/init.d/dnscrypt-proxy restart >/dev/null 2>&1")
+       luci.sys.call("env -i /etc/init.d/dnsmasq restart >/dev/null 2>&1")
+end
+
+s = m:section(TypedSection, "global", translate("General Options"))
+s.anonymous = true
+
+-- Main dnscrypt-proxy resource list
+
+o1 = s:option(DummyValue, "", translate("Default Resolver List"))
+o1.template = "dnscrypt-proxy/res_options"
+o1.value = res_input
+
+o2 = s:option(DummyValue, "", translate("File Date"))
+o2.template = "dnscrypt-proxy/res_options"
+o2.value = date.to_http(nixio.fs.stat(res_input).mtime)
+
+o3 = s:option(DummyValue, "", translate("File Checksum"))
+o3.template = "dnscrypt-proxy/res_options"
+o3.value = luci.sys.exec("sha256sum " .. res_input .. " | awk '{print $1}'")
+
+if fs.access("/lib/libustream-ssl.so") then
+       btn1 = s:option(Button, "", translate("Refresh Resolver List"),
+               translate("Download the current resolver list from 'download.dnscrypt.org'."))
+       btn1.inputtitle = translate("Refresh List")
+       btn1.inputstyle = "apply"
+       btn1.disabled = false
+       function btn1.write()
+               luci.sys.call("env -i /bin/uclient-fetch --no-check-certificate -O " .. res_input .. " " .. url .. " >/dev/null 2>&1")
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy"))
+       end
+else
+       btn1 = s:option(Button, "", translate("Refresh Resolver List"),
+               translate("No SSL support available.<br />")
+               .. translate("Please install a 'libustream-ssl' library to download the current resolver list from 'download.dnscrypt.org'."))
+       btn1.inputtitle = translate("-------")
+       btn1.inputstyle = "button"
+       btn1.disabled = true
+end
+
+if not fs.access("/etc/resolv-crypt.conf") or nixio.fs.stat("/etc/resolv-crypt.conf").size == 0 then
+       btn2 = s:option(Button, "", translate("Create Custom Config File"),
+               translate("Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS upstream timeouts with multiple DNSCrypt instances.<br />")
+               .. translatef("For further information "
+               .. "<a href=\"%s\" target=\"_blank\">"
+               .. "see the wiki online</a>", "https://wiki.openwrt.org/inbox/dnscrypt"))
+       btn2.inputtitle = translate("Create Config File")
+       btn2.inputstyle = "apply"
+       btn2.disabled = false
+       function btn2.write()
+               luci.sys.call("env -i echo 'options timeout:1' > '/etc/resolv-crypt.conf'")
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "dnscrypt-proxy"))
+       end
+else
+       btn2 = s:option(Button, "", translate("Create Custom Config File"),
+               translate("The config file '/etc/resolv-crypt.conf' already exist.<br />")
+               .. translate("Please edit the file manually in the 'Advanced' section."))
+       btn2.inputtitle = translate("-------")
+       btn2.inputstyle = "button"
+       btn2.disabled = true
+end
+
+-- Trigger settings
+
+t = s:option(ListValue, "procd_trigger", translate("Startup Trigger"),
+       translate("By default the DNSCrypt-Proxy startup will be triggered by ifup events of 'All' available network interfaces.<br />")
+       .. translate("To restrict the trigger, select only the relevant network interface. Usually the 'wan' interface should work for most users."))
+t:value("", "All")
+if dump then
+       local i, v
+       for i, v in ipairs(dump.interface) do
+               if v.interface ~= "loopback" then
+                       t:value(v.interface)
+               end
+       end
+end
+t.default = procd_trigger or "All"
+t.rmempty = true
+
+-- Mandatory options per instance
+
+s = m:section(TypedSection, "dnscrypt-proxy", translate("Instance Options"))
+s.anonymous = true
+s.addremove = true
+
+i1 = s:option(Value, "address", translate("IP Address"),
+       translate("The local IPv4 or IPv6 address. The latter one should be specified within brackets, e.g. '[::1]'."))
+i1.default = address or "127.0.0.1"
+i1.rmempty = false
+
+i2 = s:option(Value, "port", translate("Port"),
+       translate("The listening port for DNS queries."))
+i2.datatype = "port"
+i2.default = port
+i2.rmempty = false
+
+i3 = s:option(ListValue, "resolver", translate("Resolver (LOC/SEC/NOLOG)"),
+       translate("Name of the remote DNS service for resolving queries incl. Location, DNSSEC- and NOLOG-Flag."))
+i3.datatype = "hostname"
+i3.widget = "select"
+local i, v
+for i, v in ipairs(res_list) do
+       if v.name then
+               i3:value(v.name, v.name .. " (" .. v.location .. "/" .. v.dnssec .. "/" .. v.nolog .. ")")
+       end
+end
+i3.default = resolver
+i3.rmempty = false
+
+-- Extra options per instance
+
+e1 = s:option(Value, "resolvers_list", translate("Alternate Resolver List"),
+       translate("Specify a non-default Resolver List."))
+e1.datatype = "file"
+e1.optional = true
+
+e2 = s:option(Value, "ephemeral_keys", translate("Ephemeral Keys"),
+       translate("Improve privacy by using an ephemeral public key for each query. ")
+       .. translate("This option requires extra CPU cycles and is useless with most DNSCrypt server."))
+e2.datatype = "bool"
+e2.value = 1
+e2.optional = true
+
+if plug_cnt > 0 then
+       e3 = s:option(DynamicList, "blacklist", translate("Blacklist"),
+               translate("Local blacklists allow you to block abuse sites by domains or ip addresses. ")
+               .. translate("The value for this property is the blocklist type and path to the file, e.g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."))
+       e3.optional = true
+
+       e4 = s:option(Value, "block_ipv6", translate("Block IPv6"),
+               translate("Disable IPv6 to speed up DNSCrypt-Proxy."))
+       e4.datatype = "bool"
+       e4.value = 1
+       e4.optional = true
+
+       e5 = s:option(Value, "local_cache", translate("Local Cache"),
+               translate("Enable Caching to speed up DNSCcrypt-Proxy."))
+       e5.datatype = "bool"
+       e5.value = 1
+       e5.optional = true
+       
+       e6 = s:option(Value, "query_log_file", translate("DNS Query Logfile"),
+       translate("Log the received DNS queries to a file, so you can watch in real-time what is happening on the network."))
+       e6.optional = true
+end
+
+-- Dnsmasq options
+
+m1 = Map("dhcp")
+
+s1 = m1:section(TypedSection, "dnsmasq", translate("Dnsmasq Options"))
+s1.anonymous = true
+
+d1 = s1:option(Flag, "", translate("Transfer Options To Dnsmasq"),
+       translate("Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />")
+       .. translate("Please note: This may change the values for 'noresolv', 'resolvfile', 'allservers' and the list 'server' settings."))
+d1.default = d1.enabled
+d1.rmempty = false
+
+return m, m1
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/config_css.htm
new file mode 100644 (file)
index 0000000..2233a15
--- /dev/null
@@ -0,0 +1,13 @@
+<style type="text/css">
+       textarea
+       {
+               border: 1px solid #cccccc;
+               padding: 5px;
+               font-size: 12px;
+               font-family: monospace;
+               resize: none;
+               white-space: pre;
+               overflow-wrap: normal;
+               overflow-x: scroll;
+       }
+</style>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/logread.htm
new file mode 100644 (file)
index 0000000..5c5ac6f
--- /dev/null
@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+       <fieldset class="cbi-section">
+               <div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related messages only.%></div>
+               <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+       </fieldset>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/res_options.htm
new file mode 100644 (file)
index 0000000..04dc37b
--- /dev/null
@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="reslist" id="reslist" type="text" class="cbi-input-text" style="background:transparent;border:none;box-shadow:none;color:#0069d6;width:500px" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>
diff --git a/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm b/applications/luci-app-dnscrypt-proxy/luasrc/view/dnscrypt-proxy/view_reslist.htm
new file mode 100644 (file)
index 0000000..76a2300
--- /dev/null
@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+       <fieldset class="cbi-section">
+               <div class="cbi-section-descr"><%:This form shows the content of the current DNSCrypt Resolver List.%></div>
+               <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+       </fieldset>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po b/applications/luci-app-dnscrypt-proxy/po/ja/dnscrypt-proxy.po
new file mode 100644 (file)
index 0000000..2cd01c0
--- /dev/null
@@ -0,0 +1,279 @@
+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 2.0.4\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "-------"
+msgstr "(利用不可)"
+
+msgid "Advanced"
+msgstr "詳細"
+
+msgid "Alternate Resolver List"
+msgstr "代替 リゾルバ リスト"
+
+msgid ""
+"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />"
+msgstr "Dnsmasq の構成に、DNSCrypt-Proxy を指定する設定を適用します。<br />"
+
+msgid "Blacklist"
+msgstr "ブラックリスト"
+
+msgid "Block IPv6"
+msgstr "IPv6 のブロック"
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"'All' available network interfaces.<br />"
+msgstr ""
+"デフォルトでは、 DNSCrypt-Proxy は利用可能な全ネットワーク インターフェース"
+"の ifup イベントによりトリガされ起動します。<br />"
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr "DNSCrypt-Proxy パッケージの設定です。"
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances.<br />"
+msgstr ""
+"複数の DNSCrypt インスタンスで DNS アップストリーム タイムアウトの設定値を共"
+"用するため、 'options timeout:1' を含めた '/etc/resolv-crypt.conf' を作成しま"
+"す。<br />"
+
+msgid "Create Config File"
+msgstr "設定ファイルの作成"
+
+msgid "Create Custom Config File"
+msgstr "カスタム設定ファイルの作成"
+
+msgid "DNS Query Logfile"
+msgstr "DNS クエリ ログファイル"
+
+msgid "DNSCrypt-Proxy"
+msgstr "DNSCrypt-Proxy"
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr "DNSCrypt-Proxy ログファイル"
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr "DNSCrypt-Proxy リゾルバ リスト"
+
+msgid "Default Resolver List"
+msgstr "デフォルト リゾルバ リスト"
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、IPv6 を無効化します。"
+
+msgid "Dnsmasq Options"
+msgstr "Dnsmasq オプション"
+
+msgid "Download the current resolver list from 'download.dnscrypt.org'."
+msgstr ""
+"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードします。"
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr "DNSCrypt-Proxy 設定の編集"
+
+msgid "Edit Dnsmasq Configuration"
+msgstr "Dnsmasq 設定の編集"
+
+msgid "Edit Resolvcrypt Configuration"
+msgstr "Resolvcrypt 設定の編集"
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr "DNSCrypt-Proxy の高速化のため、キャッシュ機能を有効化します。"
+
+msgid "Ephemeral Keys"
+msgstr "一時的なキー"
+
+msgid "File Checksum"
+msgstr "ファイル チェックサム"
+
+msgid "File Date"
+msgstr "ファイル日付"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+"詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン Wiki</a> を確認して"
+"ください。"
+
+msgid "General Options"
+msgstr "全般オプション"
+
+msgid "IP Address"
+msgstr "IP アドレス"
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+"クエリ毎に一時的な公開鍵を使用することにより、プライバシーを向上します。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Instance Options"
+msgstr "インスタンス オプション"
+
+msgid "Local Cache"
+msgstr "ローカル キャッシュ"
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+"ローカル ブラックリストは、不正なサイトをドメイン名または IP アドレスによって"
+"ブロックすることが可能です。"
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+"受信した DNS クエリをファイルに記録します。これにより、ネットワークで何が起き"
+"ているかをリアルタイムに把握することが可能です。"
+
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
+msgstr ""
+"クエリの名前解決を行う、ロケーション, DNSSECの有無, NOLOG フラグを含めたリ"
+"モート DNS サービスの名前です。"
+
+msgid "No SSL support available.<br />"
+msgstr "利用可能な SSL サポートがありません。<br />"
+
+msgid "No default resolver list and no SSL support available.<br />"
+msgstr ""
+"デフォルトのリゾルバ リストと、利用可能な SSL サポートがありません。<br />"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid "Please edit the file manually in the 'Advanced' section."
+msgstr "'詳細' タブで手動でファイルを編集してください。"
+
+msgid ""
+"Please install a 'libustream-ssl' library to download the current resolver "
+"list from 'download.dnscrypt.org'."
+msgstr ""
+"現在のリゾルバ リストを 'download.dnscrypt.org' からダウンロードするために、 "
+"'libustream-ssl' ライブラリをインストールしてください。"
+
+msgid ""
+"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-"
+"resolvers.csv' to use this package."
+msgstr ""
+"このパッケージを利用するには、リゾルバ リストを '/usr/share/dnscrypt-proxy/"
+"dnscrypt-resolvers.csv' にインストールしてください。"
+
+msgid ""
+"Please note: This may change the values for 'noresolv', 'resolvfile', "
+"'allservers' and the list 'server' settings."
+msgstr ""
+"注: これは、 'noresolv' および 'resolvfile', 'allservers', 'list server' の設"
+"定値を変更する場合があります。"
+
+msgid "Port"
+msgstr "ポート"
+
+msgid "Refresh List"
+msgstr "リストのリフレッシュ"
+
+msgid "Refresh Resolver List"
+msgstr "リゾルバ リストのリフレッシュ"
+
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr "リゾルバ(LOC/SEC/NOLOG)"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Specify a non-default Resolver List."
+msgstr "デフォルトとは異なるリゾルバ リストを設定します。"
+
+msgid "Startup Trigger"
+msgstr "スタートアップ トリガ"
+
+msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />"
+msgstr "設定ファイル '/etc/resolv-crypt.conf' は既に存在しています。<br />"
+
+msgid "The listening port for DNS queries."
+msgstr "DNS クエリを待ち受けるポートです。"
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+"ローカルの IPv4 または IPv6 アドレスです。 IPv6 アドレスの場合、ブラケット "
+"\"[ ]\" を含めて記述される必要があります(例: '[::1]')。"
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+"このプロパティの値は、ブロックリストのタイプ及びファイルへのパスの組み合わせ"
+"です。(例: 'domains:/path/to/domainlist.txt' または 'ips:/path/to/iplist."
+"txt')"
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+"このフォームでは、メインの DNSCrypt-Proxy 設定ファイル (/etc/config/dnscrypt-"
+"proxy) の内容を変更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+"このフォームでは、メインの Dnsmasq 設定ファイル (/etc/config/dhcp) の内容を変"
+"更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the resolv-crypt configuration "
+"file (/etc/resolv-crypt.conf)."
+msgstr ""
+"このフォームでは、 resolv-crypt 設定ファイル(/etc/resolv-crypt.conf)の内容"
+"を変更することができます。"
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+"このフォームには、現在の DNSCrypt リゾルバ リストの内容が表示されます。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+"このフォームには、システムログ内の DNSCrypt-Proxy に関連するメッセージのみが"
+"表示されます。"
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+"このオプションは、通常よりも CPU リソースを多く使用するほか、ほとんどの "
+"DNSCrypt サーバーでは不要なものです。"
+
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
+msgstr ""
+"トリガを限定するには、適切なインターフェースを選択してください。通常、 'wan' "
+"インターフェースがほとんどのユーザーに適しています。"
+
+msgid "Transfer Options To Dnsmasq"
+msgstr "Dnsmasq の転送オプション"
+
+msgid "View Logfile"
+msgstr "ログファイルの確認"
+
+msgid "View Resolver List"
+msgstr "リゾルバ リストの確認"
diff --git a/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot b/applications/luci-app-dnscrypt-proxy/po/templates/dnscrypt-proxy.pot
new file mode 100644 (file)
index 0000000..59bded8
--- /dev/null
@@ -0,0 +1,228 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "-------"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Alternate Resolver List"
+msgstr ""
+
+msgid ""
+"Apply DNSCrypt-Proxy specific settings to the Dnsmasq configuration.<br />"
+msgstr ""
+
+msgid "Blacklist"
+msgstr ""
+
+msgid "Block IPv6"
+msgstr ""
+
+msgid ""
+"By default the DNSCrypt-Proxy startup will be triggered by ifup events of "
+"'All' available network interfaces.<br />"
+msgstr ""
+
+msgid "Configuration of the DNSCrypt-Proxy package."
+msgstr ""
+
+msgid ""
+"Create '/etc/resolv-crypt.conf' with 'options timeout:1' to reduce DNS "
+"upstream timeouts with multiple DNSCrypt instances.<br />"
+msgstr ""
+
+msgid "Create Config File"
+msgstr ""
+
+msgid "Create Custom Config File"
+msgstr ""
+
+msgid "DNS Query Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Logfile"
+msgstr ""
+
+msgid "DNSCrypt-Proxy Resolver List"
+msgstr ""
+
+msgid "Default Resolver List"
+msgstr ""
+
+msgid "Disable IPv6 to speed up DNSCrypt-Proxy."
+msgstr ""
+
+msgid "Dnsmasq Options"
+msgstr ""
+
+msgid "Download the current resolver list from 'download.dnscrypt.org'."
+msgstr ""
+
+msgid "Edit DNSCrypt-Proxy Configuration"
+msgstr ""
+
+msgid "Edit Dnsmasq Configuration"
+msgstr ""
+
+msgid "Edit Resolvcrypt Configuration"
+msgstr ""
+
+msgid "Enable Caching to speed up DNSCcrypt-Proxy."
+msgstr ""
+
+msgid "Ephemeral Keys"
+msgstr ""
+
+msgid "File Checksum"
+msgstr ""
+
+msgid "File Date"
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see the wiki "
+"online</a>"
+msgstr ""
+
+msgid "General Options"
+msgstr ""
+
+msgid "IP Address"
+msgstr ""
+
+msgid "Improve privacy by using an ephemeral public key for each query."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Instance Options"
+msgstr ""
+
+msgid "Local Cache"
+msgstr ""
+
+msgid ""
+"Local blacklists allow you to block abuse sites by domains or ip addresses."
+msgstr ""
+
+msgid ""
+"Log the received DNS queries to a file, so you can watch in real-time what "
+"is happening on the network."
+msgstr ""
+
+msgid ""
+"Name of the remote DNS service for resolving queries incl. Location, DNSSEC- "
+"and NOLOG-Flag."
+msgstr ""
+
+msgid "No SSL support available.<br />"
+msgstr ""
+
+msgid "No default resolver list and no SSL support available.<br />"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Please edit the file manually in the 'Advanced' section."
+msgstr ""
+
+msgid ""
+"Please install a 'libustream-ssl' library to download the current resolver "
+"list from 'download.dnscrypt.org'."
+msgstr ""
+
+msgid ""
+"Please install a resolver list to '/usr/share/dnscrypt-proxy/dnscrypt-"
+"resolvers.csv' to use this package."
+msgstr ""
+
+msgid ""
+"Please note: This may change the values for 'noresolv', 'resolvfile', "
+"'allservers' and the list 'server' settings."
+msgstr ""
+
+msgid "Port"
+msgstr ""
+
+msgid "Refresh List"
+msgstr ""
+
+msgid "Refresh Resolver List"
+msgstr ""
+
+msgid "Resolver (LOC/SEC/NOLOG)"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Specify a non-default Resolver List."
+msgstr ""
+
+msgid "Startup Trigger"
+msgstr ""
+
+msgid "The config file '/etc/resolv-crypt.conf' already exist.<br />"
+msgstr ""
+
+msgid "The listening port for DNS queries."
+msgstr ""
+
+msgid ""
+"The local IPv4 or IPv6 address. The latter one should be specified within "
+"brackets, e.g. '[::1]'."
+msgstr ""
+
+msgid ""
+"The value for this property is the blocklist type and path to the file, e."
+"g.'domains:/path/to/dbl.txt' or 'ips:/path/to/ipbl.txt'."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main DNSCrypt-Proxy "
+"configuration file (/etc/config/dnscrypt-proxy)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main Dnsmasq configuration "
+"file (/etc/config/dhcp)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the resolv-crypt configuration "
+"file (/etc/resolv-crypt.conf)."
+msgstr ""
+
+msgid "This form shows the content of the current DNSCrypt Resolver List."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for DNSCrypt-Proxy related "
+"messages only."
+msgstr ""
+
+msgid ""
+"This option requires extra CPU cycles and is useless with most DNSCrypt "
+"server."
+msgstr ""
+
+msgid ""
+"To restrict the trigger, select only the relevant network interface. Usually "
+"the 'wan' interface should work for most users."
+msgstr ""
+
+msgid "Transfer Options To Dnsmasq"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "View Resolver List"
+msgstr ""
diff --git a/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy b/applications/luci-app-dnscrypt-proxy/root/etc/uci-defaults/60_luci-dnscrypt-proxy
new file mode 100755 (executable)
index 0000000..ec4da17
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@dnscrypt-proxy[-1]
+       add ucitrack dnscrypt-proxy
+       set ucitrack.@dnscrypt-proxy[-1].init=dnscrypt-proxy
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
index d16ef4a..83512db 100644 (file)
@@ -9,9 +9,6 @@ include $(TOPDIR)/rules.mk
 LUCI_TITLE:=LuCI Support for DynaPoint
 LUCI_DEPENDS:=+dynapoint
 
-PKG_NAME:=luci-app-dynapoint
-PKG_VERSION:=1.0
-PKG_RELEASE:=1
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Tobias Ilte <tobias.ilte@campus.tu-berlin.de>
 include ../../luci.mk
diff --git a/applications/luci-app-dynapoint/po/pt-br/dynapoint.po b/applications/luci-app-dynapoint/po/pt-br/dynapoint.po
new file mode 100644 (file)
index 0000000..59b0262
--- /dev/null
@@ -0,0 +1,107 @@
+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 "Activate this wVIF if status is:"
+msgstr "Aivar este wVIF se o estado for:"
+
+msgid "Append hostname to ssid"
+msgstr "Sufixar o nome do equipamento ao SSID"
+
+msgid "Append the router's hostname to the SSID when connectivity check fails"
+msgstr ""
+"Sufixar o nome do roteador ao SSID quando a verificação da conectividade "
+"falhar"
+
+msgid "Check Internet connectivity via HTTP header download"
+msgstr "Cerifique a conectividade com a internet baixando o cabeçalho HTTP "
+
+msgid "Configuration"
+msgstr "Configuração"
+
+msgid "Curl is currently not installed."
+msgstr "O cURL não está instalado."
+
+msgid "Device"
+msgstr "Dispositivo"
+
+msgid "Disabled"
+msgstr "Desabilitado"
+
+msgid "DynaPoint"
+msgstr "DynaPoint"
+
+msgid "Dynamic Access Point Manager"
+msgstr "Gerenciamento do Ponto de Acesso Dinâmico"
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid ""
+"Failure counter after how many failed download attempts, the state is "
+"considered as offline"
+msgstr "Numero de falhar para considerar como inalcançável"
+
+msgid "List of Wireless Virtual Interfaces (wVIF)"
+msgstr "Lista de Interfaces Virtuais Wireless (wVIF)"
+
+msgid "List of host addresses"
+msgstr "Lista de endereços dos equipamentos"
+
+msgid ""
+"List of host addresses (url or IP) to track and request http headers from"
+msgstr ""
+"Lista de endereços dos equipamentos (URL ou endereço IP) para requisitar "
+"cabeçalhos HTTP"
+
+msgid "Mode"
+msgstr "Modo"
+
+msgid "Not used by DynaPoint"
+msgstr "Não usado pelo DynaPoint"
+
+msgid "Offline"
+msgstr "Desconectado"
+
+msgid "Online"
+msgstr "Conectado"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "Switch_to_offline threshold"
+msgstr "Limiar para mudar para desconectado"
+
+msgid "Test-run interval"
+msgstr "Intervalo para execução do teste"
+
+msgid "Time interval in seconds to re-start a new test run"
+msgstr "Intervalo, em segundos, para reiniciar um nova execução do teste"
+
+msgid "Use curl"
+msgstr "Usar cURL"
+
+msgid "Use curl instead of wget"
+msgstr "Usar cURL ao invés do wget"
+
+msgid "Use curl instead of wget for testing the connectivity."
+msgstr "Usar cURL ao invés do wget para testar a conectividade."
+
+msgid "Used interface"
+msgstr "Dispositivos usadas"
+
+msgid "Which interface should curl use. (Use ifconfig to find out)"
+msgstr "Qual dispositivo o cURL deve usar. (Use ifconfig para listá-las)"
+
+msgid "WiFi Status"
+msgstr "Estado da WiFi"
diff --git a/applications/luci-app-e2guardian/Makefile b/applications/luci-app-e2guardian/Makefile
new file mode 100644 (file)
index 0000000..c3ac029
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=E2Guardian LuCI Interface
+LUCI_DEPENDS:=+luci-mod-admin-full +e2guardian
+
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/controller/e2guardian.lua
new file mode 100644 (file)
index 0000000..dd545f5
--- /dev/null
@@ -0,0 +1,22 @@
+--[[
+
+LuCI E2Guardian module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+       Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+module("luci.controller.e2guardian", package.seeall)
+
+function index()
+       entry({"admin", "services", "e2guardian"}, cbi("e2guardian"), _("E2Guardian"))
+end
diff --git a/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua b/applications/luci-app-e2guardian/luasrc/model/cbi/e2guardian.lua
new file mode 100644 (file)
index 0000000..b621321
--- /dev/null
@@ -0,0 +1,399 @@
+--[[
+
+LuCI E2Guardian module
+
+Copyright (C) 2015, Itus Networks, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+       Luka Perkov <luka.perkov@sartura.hr>
+
+]]--
+
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+
+m = Map("e2guardian", translate("E2Guardian"))
+m.on_after_commit = function() luci.sys.call("/etc/init.d/e2guardian restart") end
+
+s = m:section(TypedSection, "e2guardian")
+s.anonymous = true
+s.addremove = false
+
+s:tab("tab_general", translate("General Settings"))
+s:tab("tab_additional", translate("Additional Settings"))
+s:tab("tab_logs", translate("Logs"))
+
+
+----------------- General Settings Tab -----------------------
+
+filterip = s:taboption("tab_general", Value, "filterip", translate("IP that E2Guardian listens"))
+filterip.datatype = "ip4addr"
+
+filterports = s:taboption("tab_general", Value, "filterports", translate("Port that E2Guardian listens"))
+filterports.datatype = "portrange"
+filterports.placeholder = "0-65535"
+
+proxyip = s:taboption("tab_general", Value, "proxyip", translate("IP address of the proxy"))
+proxyip.datatype = "ip4addr"
+proxyip.default = "127.0.0.1"
+
+proxyport = s:taboption("tab_general", Value, "proxyport", translate("Port of the proxy"))
+proxyport.datatype = "portrange"
+proxyport.placeholder = "0-65535"
+
+languagedir = s:taboption("tab_general", Value, "languagedir", translate("Language dir"))
+languagedir.datatype = "string"
+languagedir.default = "/usr/share/e2guardian/languages"
+
+language = s:taboption("tab_general", Value, "language", translate("Language to use"))
+language.datatype = "string"
+language.default = "ukenglish"
+
+loglevel = s:taboption("tab_general", ListValue, "loglevel", translate("Logging Settings"))
+loglevel:value("0",  translate("none"))
+loglevel:value("1",  translate("just denied"))
+loglevel:value("2",  translate("all text based"))
+loglevel:value("3",  translate("all requests"))
+loglevel.default = "2"
+
+logexceptionhits = s:taboption("tab_general", ListValue, "logexceptionhits", translate("Log Exception Hits"))
+logexceptionhits:value("0",  translate("never"))
+logexceptionhits:value("1",  translate("log, but don't mark as exceptions"))
+logexceptionhits:value("2",  translate("log and mark"))
+logexceptionhits.default = "2"
+
+logfileformat = s:taboption("tab_general", ListValue, "logfileformat", translate("Log File Format"))
+logfileformat:value("1",  translate("DansgGuardian format, space delimited"))
+logfileformat:value("2",  translate("CSV-style format"))
+logfileformat:value("3",  translate("Squid Log File Format"))
+logfileformat:value("4",  translate("Tab delimited"))
+logfileformat:value("5",  translate("Protex format"))
+logfileformat:value("6",  translate("Protex format with server field blanked"))
+logfileformat.default = "1"
+
+accessdeniedaddress = s:taboption("tab_general", Value, "accessdeniedaddress", translate("Access denied address"),
+translate("Server to which the cgi e2guardian reporting script was copied. Reporting levels 1 and 2 only"))
+accessdeniedaddress.datatype = "string"
+accessdeniedaddress.default = "http://YOURSERVER.YOURDOMAIN/cgi-bin/e2guardian.pl"
+
+usecustombannedimage = s:taboption("tab_general", ListValue, "usecustombannedimage", translate("Banned image replacement"))
+usecustombannedimage:value("on",  translate("Yes"))
+usecustombannedimage:value("off",  translate("No"))
+usecustombannedimage.default = "on"
+
+custombannedimagefile = s:taboption("tab_general", Value, "custombannedimagefile", translate("Custom banned image file"))
+custombannedimagefile.datatype = "string"
+custombannedimagefile.default = "/usr/share/e2guardian/transparent1x1.gif"
+
+usecustombannedflash = s:taboption("tab_general", ListValue, "usecustombannedflash", translate("Banned flash replacement"))
+usecustombannedflash:value("on",  translate("Yes"))
+usecustombannedflash:value("off",  translate("No"))
+usecustombannedflash.default = "on"
+
+custombannedflashfile = s:taboption("tab_general", Value, "custombannedflashfile", translate("Custom banned flash file"))
+custombannedflashfile.datatype = "string"
+custombannedflashfile.default = "/usr/share/e2guardian/blockedflash.swf"
+
+filtergroups = s:taboption("tab_general", Value, "filtergroups", translate("Number of filter groups"))
+filtergroups.datatype = "and(uinteger,min(1))"
+filtergroups.default = "1"
+
+filtergroupslist = s:taboption("tab_general", Value, "filtergroupslist", translate("List of filter groups"))
+filtergroupslist.datatype = "string"
+filtergroupslist.default = "/etc/e2guardian/lists/filtergroupslist"
+
+bannediplist = s:taboption("tab_general", Value, "bannediplist", translate("List of banned IPs"))
+bannediplist.datatype = "string"
+bannediplist.default = "/etc/e2guardian/lists/bannediplist"
+
+exceptioniplist = s:taboption("tab_general", Value, "exceptioniplist", translate("List of IP exceptions"))
+exceptioniplist.datatype = "string"
+exceptioniplist.default = "/etc/e2guardian/lists/exceptioniplist"
+
+perroomblockingdirectory = s:taboption("tab_general", Value, "perroomblockingdirectory", translate("Per-Room blocking definition directory"))
+perroomblockingdirectory.datatype = "string"
+perroomblockingdirectory.default = "/etc/e2guardian/lists/bannedrooms/"
+
+showweightedfound = s:taboption("tab_general", ListValue, "showweightedfound", translate("Show weighted phrases found"))
+showweightedfound:value("on",  translate("Yes"))
+showweightedfound:value("off",  translate("No"))
+showweightedfound.default = "on"
+
+weightedphrasemode = s:taboption("tab_general", ListValue, "weightedphrasemode", translate("Weighted phrase mode"))
+weightedphrasemode:value("0",  translate("off"))
+weightedphrasemode:value("1",  translate("on, normal operation"))
+weightedphrasemode:value("2",  translate("on, phrase found only counts once on a page"))
+weightedphrasemode.default = "2"
+
+urlcachenumber = s:taboption("tab_general", Value, "urlcachenumber", translate("Clean result caching for URLs"))
+urlcachenumber.datatype = "and(uinteger,min(0))"
+urlcachenumber.default = "1000"
+
+urlcacheage = s:taboption("tab_general", Value, "urlcacheage", translate("Age before they should be ignored in seconds"))
+urlcacheage.datatype = "and(uinteger,min(0))"
+urlcacheage.default = "900"
+
+scancleancache = s:taboption("tab_general", ListValue, "scancleancache", translate("Cache for content (AV) scans as 'clean'"))
+scancleancache:value("on",  translate("Yes"))
+scancleancache:value("off",  translate("No"))
+scancleancache.default = "on"
+
+phrasefiltermode = s:taboption("tab_general", ListValue, "phrasefiltermode", translate("Filtering options"))
+phrasefiltermode:value("0",  translate("raw"))
+phrasefiltermode:value("1",  translate("smart"))
+phrasefiltermode:value("2",  translate("both raw and smart"))
+phrasefiltermode:value("3",  translate("meta/title"))
+phrasefiltermode.default = "2"
+
+preservecase = s:taboption("tab_general", ListValue, "perservecase", translate("Lower caseing options"))
+preservecase:value("0",  translate("force lower case"))
+preservecase:value("1",  translate("don't change"))
+preservecase:value("2",  translate("scan fist in lower, then in original"))
+preservecase.default = "0"
+
+hexdecodecontent = s:taboption("tab_general", ListValue, "hexdecodecontent", translate("Hex decoding options"))
+hexdecodecontent:value("on",  translate("Yes"))
+hexdecodecontent:value("off",  translate("No"))
+hexdecodecontent.default = "off"
+
+forcequicksearch = s:taboption("tab_general", ListValue, "forcequicksearch", translate("Quick search"))
+forcequicksearch:value("on",  translate("Yes"))
+forcequicksearch:value("off",  translate("No"))
+forcequicksearch.default = "off"
+
+reverseaddresslookups= s:taboption("tab_general", ListValue, "reverseaddresslookups", translate("Reverse lookups for banned site and URLs"))
+reverseaddresslookups:value("on",  translate("Yes"))
+reverseaddresslookups:value("off",  translate("No"))
+reverseaddresslookups.default = "off"
+
+reverseclientiplookups = s:taboption("tab_general", ListValue, "reverseclientiplookups", translate("Reverse lookups for banned and exception IP lists"))
+reverseclientiplookups:value("on",  translate("Yes"))
+reverseclientiplookups:value("off",  translate("No"))
+reverseclientiplookups.default = "off"
+
+logclienthostnames = s:taboption("tab_general", ListValue, "logclienthostnames", translate("Perform reverse lookups on client IPs for successful requests"))
+logclienthostnames:value("on",  translate("Yes"))
+logclienthostnames:value("off",  translate("No"))
+logclienthostnames.default = "off"
+
+createlistcachefiles = s:taboption("tab_general", ListValue, "createlistcachefiles", translate("Build bannedsitelist and bannedurllist cache files"))
+createlistcachefiles:value("on",translate("Yes"))
+createlistcachefiles:value("off",translate("No"))
+createlistcachefiles.default = "on"
+
+prefercachedlists = s:taboption("tab_general", ListValue, "prefercachedlists", translate("Prefer cached list files"))
+prefercachedlists:value("on",  translate("Yes"))
+prefercachedlists:value("off",  translate("No"))
+prefercachedlists.default = "off"
+
+maxuploadsize = s:taboption("tab_general", Value, "maxuploadsize", translate("Max upload size (in Kbytes)"))
+maxuploadsize:value("-1",  translate("no blocking"))
+maxuploadsize:value("0",  translate("complete block"))
+maxuploadsize.default = "-1"
+
+maxcontentfiltersize = s:taboption("tab_general", Value, "maxcontentfiltersize", translate("Max content filter size"),
+translate("The value must not be higher than max content ram cache scan size or 0 to match it"))
+maxcontentfiltersize.datatype = "and(uinteger,min(0))"
+maxcontentfiltersize.default = "256"
+
+maxcontentramcachescansize = s:taboption("tab_general", Value, "maxcontentramcachescansize", translate("Max content ram cache scan size"),
+translate("This is the max size of file that DG will download and cache in RAM"))
+maxcontentramcachescansize.datatype = "and(uinteger,min(0))"
+maxcontentramcachescansize.default = "2000"
+
+maxcontentfilecachescansize = s:taboption("tab_general", Value, "maxcontentfilecachescansize", translate("Max content file cache scan size"))
+maxcontentfilecachescansize.datatype = "and(uinteger,min(0))"
+maxcontentfilecachescansize.default = "20000"
+
+proxytimeout = s:taboption("tab_general", Value, "proxytimeout", translate("Proxy timeout (5-100)"))
+proxytimeout.datatype = "range(5,100)"
+proxytimeout.default = "20"
+
+proxyexchange = s:taboption("tab_general", Value, "proxyexchange", translate("Proxy header excahnge (20-300)"))
+proxyexchange.datatype = "range(20,300)"
+proxyexchange.default = "20"
+
+pcontimeout = s:taboption("tab_general", Value, "pcontimeout", translate("Pconn timeout"),
+translate("How long a persistent connection will wait for other requests"))
+pcontimeout.datatype = "range(5,300)"
+pcontimeout.default = "55"
+
+filecachedir = s:taboption("tab_general", Value, "filecachedir", translate("File cache directory"))
+filecachedir.datatype = "string"
+filecachedir.default = "/tmp"
+
+deletedownloadedtempfiles = s:taboption("tab_general", ListValue, "deletedownloadedtempfiles", translate("Delete file cache after user completes download"))
+deletedownloadedtempfiles:value("on",  translate("Yes"))
+deletedownloadedtempfiles:value("off", translate("No"))
+deletedownloadedtempfiles.default = "on"
+
+initialtrickledelay = s:taboption("tab_general", Value, "initialtrickledelay", translate("Initial Trickle delay"),
+translate("Number of seconds a browser connection is left waiting before first being sent *something* to keep it alive"))
+initialtrickledelay.datatype = "and(uinteger,min(0))"
+initialtrickledelay.default = "20"
+
+trickledelay = s:taboption("tab_general", Value, "trickledelay", translate("Trickle delay"),
+translate("Number of seconds a browser connection is left waiting before being sent more *something* to keep it alive"))
+trickledelay.datatype = "and(uinteger,min(0))"
+trickledelay.default = "10"
+
+downloadmanager = s:taboption("tab_general", Value, "downloadmanager", translate("Download manager"))
+downloadmanager.datatype = "string"
+downloadmanager.default = "/etc/e2guardian/downloadmanagers/default.conf"
+
+contentscannertimeout = s:taboption("tab_general", Value, "contentscannertimeout", translate("Content scanner timeout"))
+contentscannertimeout.datatype = "and(uinteger,min(0))"
+contentscannertimeout.default = "60"
+
+contentscanexceptions = s:taboption("tab_general", ListValue, "contentscanexceptions", translate("Content scan exceptions"))
+contentscanexceptions:value("on",  translate("Yes"))
+contentscanexceptions:value("off", translate("No"))
+contentscanexceptions.default = "off"
+
+recheckreplacedurls = s:taboption("tab_general", ListValue, "recheckreplacedurls", translate("e-check replaced URLs"))
+recheckreplacedurls:value("on",  translate("Yes"))
+recheckreplacedurls:value("off", translate("No"))
+recheckreplacedurls.default = "off"
+
+forwardedfor = s:taboption("tab_general", ListValue, "forwardedfor", translate("Misc setting: forwardedfor"),
+translate("If on, it may help solve some problem sites that need to know the source ip."))
+forwardedfor:value("on",  translate("Yes"))
+forwardedfor:value("off", translate("No"))
+forwardedfor.default = "off"
+
+usexforwardedfor = s:taboption("tab_general", ListValue, "usexforwardedfor", translate("Misc setting: usexforwardedfor"),
+translate("This is for when you have squid between the clients and E2Guardian"))
+usexforwardedfor:value("on",  translate("Yes"))
+usexforwardedfor:value("off", translate("No"))
+usexforwardedfor.default = "off"
+
+logconnectionhandlingerrors = s:taboption("tab_general", ListValue, "logconnectionhandlingerrors", translate("Log debug info about log()ing and accept()ing"))
+logconnectionhandlingerrors:value("on",  translate("Yes"))
+logconnectionhandlingerrors:value("off", translate("No"))
+logconnectionhandlingerrors.default = "on"
+
+logchildprocesshandling = s:taboption("tab_general", ListValue, "logchildprocesshandling", translate("Log child process handling"))
+logchildprocesshandling:value("on",  translate("Yes"))
+logchildprocesshandling:value("off", translate("No"))
+logchildprocesshandling.default = "off"
+
+maxchildren = s:taboption("tab_general", Value, "maxchildren", translate("Max number of processes to spawn"))
+maxchildren.datatype = "and(uinteger,min(0))"
+maxchildren.default = "180"
+
+minchildren = s:taboption("tab_general", Value, "minchildren", translate("Min number of processes to spawn"))
+minchildren.datatype = "and(uinteger,min(0))"
+minchildren.default = "20"
+
+minsparechildren = s:taboption("tab_general", Value, "minsparechildren", translate("Min number of processes to keep ready"))
+minsparechildren.datatype = "and(uinteger,min(0))"
+minsparechildren.default = "16"
+
+preforkchildren = s:taboption("tab_general", Value, "preforkchildren", translate("Sets minimum nuber of processes when it runs out"))
+preforkchildren.datatype = "and(uinteger,min(0))"
+preforkchildren.default = "10"
+
+maxsparechildren = s:taboption("tab_general", Value, "maxsparechildren", translate("Sets the maximum number of processes to have doing nothing"))
+maxsparechildren.datatype = "and(uinteger,min(0))"
+maxsparechildren.default = "32"
+
+maxagechildren = s:taboption("tab_general", Value, "maxagechildren", translate("Max age of child process"))
+maxagechildren.datatype = "and(uinteger,min(0))"
+maxagechildren.default = "500"
+
+maxips = s:taboption("tab_general", Value, "maxips", translate("Max number of clinets allowed to connect"))
+maxips:value("0",  translate("no limit"))
+maxips.default = "0"
+
+ipipcfilename = s:taboption("tab_general", Value, "ipipcfilename", translate("IP list IPC server directory and filename"))
+ipipcfilename.datatype = "string"
+ipipcfilename.default = "/tmp/.dguardianipc"
+
+urlipcfilename = s:taboption("tab_general", Value, "urlipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process"))
+urlipcfilename.datatype = "string"
+urlipcfilename.default = "/tmp/.dguardianurlipc"
+
+ipcfilename = s:taboption("tab_general", Value, "ipcfilename", translate("Defines URL list IPC server directory and filename used to communicate with the URL cache process"))
+ipcfilename.datatype = "string"
+ipcfilename.default = "/tmp/.dguardianipipc"
+
+nodeamon = s:taboption("tab_general", ListValue, "nodeamon", translate("Disable deamoning"))
+nodeamon:value("on",  translate("Yes"))
+nodeamon:value("off", translate("No"))
+nodeamon.default = "off"
+
+nologger = s:taboption("tab_general", ListValue, "nologger", translate("Disable logger"))
+nologger:value("on",  translate("Yes"))
+nologger:value("off", translate("No"))
+nologger.default = "off"
+
+logadblock = s:taboption("tab_general", ListValue, "logadblock", translate("Enable logging of ADs"))
+logadblock:value("on",  translate("Yes"))
+logadblock:value("off", translate("No"))
+logadblock.default = "off"
+
+loguseragent = s:taboption("tab_general", ListValue, "loguseragent", translate("Enable logging of client user agent"))
+loguseragent:value("on",  translate("Yes"))
+loguseragent:value("off", translate("No"))
+loguseragent.default = "off"
+
+softrestart = s:taboption("tab_general", ListValue, "softrestart", translate("Enable soft restart"))
+softrestart:value("on",  translate("Yes"))
+softrestart:value("off", translate("No"))
+softrestart.default = "off"
+
+
+------------------------ Additional Settings Tab ----------------------------
+
+e2guardian_config_file = s:taboption("tab_additional", TextValue, "_data", "")
+e2guardian_config_file.wrap = "off"
+e2guardian_config_file.rows = 25
+e2guardian_config_file.rmempty = false
+
+function e2guardian_config_file.cfgvalue()
+       local uci = require "luci.model.uci".cursor_state()
+       file = "/etc/e2guardian/e2guardianf1.conf"
+       if file then
+               return fs.readfile(file) or ""
+       else
+               return ""
+       end
+end
+
+function e2guardian_config_file.write(self, section, value)
+       if value then
+               local uci = require "luci.model.uci".cursor_state()
+               file = "/etc/e2guardian/e2guardianf1.conf"
+               fs.writefile(file, value:gsub("\r\n", "\n"))
+       end
+end
+
+
+---------------------------- Logs Tab -----------------------------
+
+e2guardian_logfile = s:taboption("tab_logs", TextValue, "lines", "")
+e2guardian_logfile.wrap = "off"
+e2guardian_logfile.rows = 25
+e2guardian_logfile.rmempty = true
+
+function e2guardian_logfile.cfgvalue()
+       local uci = require "luci.model.uci".cursor_state()
+       file = "/tmp/e2guardian/access.log"
+       if file then
+               return fs.readfile(file) or ""
+       else
+               return "Can't read log file"
+       end
+end
+
+function e2guardian_logfile.write()
+        return ""
+end
+
+return m
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 2b3cee3..21a1b27 100644 (file)
@@ -5,7 +5,7 @@ local fs = require "nixio.fs"
 
 local f = SimpleForm("firewall",
        translate("Firewall - Custom Rules"),
-       translate("Custom rules allow you to execute arbritary iptables commands \
+       translate("Custom rules allow you to execute arbitrary iptables commands \
                which are not otherwise covered by the firewall framework. \
                The commands are executed after each firewall restart, right after \
                the default ruleset has been loaded."))
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 694bbd8..500e507 100644 (file)
@@ -19,7 +19,6 @@ s.addremove = false
 s:option(Flag, "syn_flood", translate("Enable SYN-flood protection"))
 
 o = s:option(Flag, "drop_invalid", translate("Drop invalid packets"))
-o.default = o.enabled
 
 p = {
        s:option(ListValue, "input", translate("Input")),
index 913fb75..3abdc89 100644 (file)
@@ -70,7 +70,7 @@ msgid "Custom Rules"
 msgstr "Regles personalitzades"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 1ab1360..c796873 100644 (file)
@@ -66,7 +66,7 @@ msgid "Custom Rules"
 msgstr "Vlastní pravidla"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 448f951..00e259c 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Benutzerdefinierte Regeln"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 2229bf0..6ebc228 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Προσαρμοσμένοι Κανόνες"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 9dc277d..f7658a5 100644 (file)
@@ -66,7 +66,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 670b4db..8550d05 100644 (file)
@@ -69,7 +69,7 @@ msgid "Custom Rules"
 msgstr "Reglas propias"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index cdff282..7be4d8f 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Régles spécifiques"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index ce0ad04..e269e58 100644 (file)
@@ -63,7 +63,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index c201e3d..2c3ae02 100644 (file)
@@ -66,7 +66,7 @@ msgid "Custom Rules"
 msgstr "Egyéni szabályok"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 8853524..a5c4a1e 100644 (file)
@@ -3,8 +3,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2012-04-19 23:05+0200\n"
-"Last-Translator: claudyus <claudyus84@gmail.com>\n"
+"PO-Revision-Date: 2017-09-02 23:05+0200\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -47,35 +47,35 @@ msgid "Add"
 msgstr "Aggiungi"
 
 msgid "Add and edit..."
-msgstr "Aggiungi e edita..."
+msgstr "Aggiungi e modifica..."
 
 msgid "Advanced Settings"
 msgstr "Opzioni Avanzate"
 
 msgid "Allow forward from <em>source zones</em>:"
-msgstr "Permetti routing da <em>zone di origini</em>:"
+msgstr "Permetti routing da <em>zone di origine</em>:"
 
 msgid "Allow forward to <em>destination zones</em>:"
-msgstr "Permetti rountin a <em>zone di destinazione</em>:"
+msgstr "Permetti rounting a <em>zone di destinazione</em>:"
 
 msgid "Any"
 msgstr "Qualsiasi"
 
 msgid "Covered networks"
-msgstr ""
+msgstr "Reti coperte"
 
 msgid "Custom Rules"
 msgstr "Regole Personalizzate"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
 "Le regole personalizzate ti permettorno di eseguire comandi iptables "
-"arbitrari che non solo altrimenti coperti dall'applicazione firewall. I "
+"arbitrari che non sono altrimenti coperti dall'applicazione firewall. I "
 "comandi sono eseguiti dopo ogni riavvio del firewall, giusto dopo le altre "
-"regole che son state caricate."
+"regole che sono state caricate."
 
 msgid "Destination IP address"
 msgstr "Indirizzo IP destinazione"
@@ -90,22 +90,22 @@ msgid "Destination zone"
 msgstr "Zona di destinazione"
 
 msgid "Do not rewrite"
-msgstr ""
+msgstr "Non riscrivere"
 
 msgid "Drop invalid packets"
-msgstr "Attiva"
+msgstr "Scarta pacchetti invalidi"
 
 msgid "Enable"
-msgstr ""
+msgstr "Attiva"
 
 msgid "Enable NAT Loopback"
-msgstr ""
+msgstr "Attiva NAT Loopback"
 
 msgid "Enable SYN-flood protection"
-msgstr ""
+msgstr "Attiva protezione SYN-flood"
 
 msgid "Enable logging on this zone"
-msgstr ""
+msgstr "Attiva registro su questa zona"
 
 msgid "External IP address"
 msgstr "Indirizzo IP Esterno"
@@ -135,25 +135,25 @@ msgid "Firewall - Zone Settings"
 msgstr "Firewall - Opzioni delle Zone"
 
 msgid "Force connection tracking"
-msgstr ""
+msgstr "Forza tracciamento connessione"
 
 msgid "Forward"
 msgstr "Inoltra"
 
 msgid "Forward to"
-msgstr "Inoltro a"
+msgstr "Inoltra a"
 
 msgid "Friday"
-msgstr ""
+msgstr "Venerdì"
 
 msgid "From %s in %s"
-msgstr ""
+msgstr "Da %s a %s"
 
 msgid "From %s in %s with source %s"
-msgstr ""
+msgstr "Da %s a %s con sorgente %s"
 
 msgid "From %s in %s with source %s and %s"
-msgstr ""
+msgstr "Da %s a %s con sorgente %s e %s"
 
 msgid "General Settings"
 msgstr "Opzioni Generali"
@@ -177,10 +177,10 @@ msgid "Input"
 msgstr "Ingresso"
 
 msgid "Inter-Zone Forwarding"
-msgstr ""
+msgstr "Inoltro tra le zone"
 
 msgid "Internal IP address"
-msgstr "Indirizzo IP Interno"
+msgstr "Indirizzo IP interno"
 
 msgid "Internal port"
 msgstr "Porta interna"
@@ -189,92 +189,98 @@ msgid "Internal zone"
 msgstr "Zona Interna"
 
 msgid "Limit log messages"
-msgstr ""
+msgstr "Limita messaggi del registro"
 
 msgid "MSS clamping"
 msgstr ""
 
 msgid "Masquerading"
-msgstr "Dettagli"
+msgstr ""
 
 msgid "Match"
-msgstr ""
+msgstr "Corrispondenza"
 
 msgid "Match ICMP type"
-msgstr ""
+msgstr "Corrispondenza tipo ICMP"
 
 msgid "Match forwarded traffic to the given destination port or port range."
-msgstr ""
+msgstr "Corrispondi traffico inoltrato alla porta o intervallo di porte dato."
 
 msgid ""
 "Match incoming traffic directed at the given destination port or port range "
 "on this host"
 msgstr ""
+"Corrispondi traffico in entrata diretto alla porta o intervallo di porte dato "
+"su questo host"
 
 msgid ""
 "Match incoming traffic originating from the given source port or port range "
 "on the client host."
 msgstr ""
+"Corrispondi traffico in entrata originato dalla porta o intervallo di porte dato "
+"su host cliente"
 
 msgid "Monday"
-msgstr ""
+msgstr "Lunedì"
 
 msgid "Month Days"
-msgstr ""
+msgstr "Giorni del Mese"
 
 msgid "Name"
 msgstr "Nome"
 
 msgid "New SNAT rule"
-msgstr ""
+msgstr "Nuova regola SNAT"
 
 msgid "New forward rule"
-msgstr ""
+msgstr "Nuova regola di inoltro"
 
 msgid "New input rule"
-msgstr "Nuova regola di inoltro porta"
+msgstr "Nuova regola di ingresso"
 
 msgid "New port forward"
-msgstr ""
+msgstr "Nuova porta di inoltro"
 
 msgid "New source NAT"
-msgstr ""
+msgstr "Nuova sorgente NAT"
 
 msgid "Only match incoming traffic directed at the given IP address."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata diretto al dato indirizzo IP."
 
 msgid "Only match incoming traffic from these MACs."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata da questi MAC."
 
 msgid "Only match incoming traffic from this IP or range."
-msgstr ""
+msgstr "Corrispondi solo traffico in entrata da questo IP o intervallo."
 
 msgid ""
 "Only match incoming traffic originating from the given source port or port "
 "range on the client host"
 msgstr ""
+"Corrispondi solo traffico in entrata originato dalla porta o intervallo di "
+"porte sorgenti su host cliente"
 
 msgid "Open ports on router"
-msgstr ""
+msgstr "Porte aperte sul router"
 
 msgid "Other..."
-msgstr ""
+msgstr "Altri..."
 
 msgid "Output"
 msgstr ""
 
 msgid "Passes additional arguments to iptables. Use with care!"
-msgstr ""
+msgstr "Passa comandi addizionali a iptables. Usare con cura!"
 
 msgid "Port Forwards"
-msgstr ""
+msgstr "Inoltri Porta"
 
 msgid ""
 "Port forwarding allows remote computers on the Internet to connect to a "
 "specific computer or service within the private LAN."
 msgstr ""
-"L'inoltro delle porte permette ai computer in remoto su Internet "
-"diconnettersi a uno specifico computer o servizio presente nella tua LAN "
+"L'inoltro delle porte permette ai computer in remoto su Internet di "
+"connettersi a uno specifico computer o servizio presente nella LAN "
 "privata"
 
 msgid "Protocol"
@@ -283,44 +289,47 @@ msgstr "Protocollo"
 msgid ""
 "Redirect matched incoming traffic to the given port on the internal host"
 msgstr ""
+"Reindirizza il traffico in entrata alla porta data su host interno"
 
 msgid "Redirect matched incoming traffic to the specified internal host"
-msgstr ""
+msgstr "Reindirizza il traffico in entrata allo specifico host interno"
 
 msgid "Restart Firewall"
-msgstr ""
+msgstr "Riavvia Firewall"
 
 msgid "Restrict Masquerading to given destination subnets"
-msgstr ""
+msgstr "Limita il Masquerading alle subnet di destinazione date"
 
 msgid "Restrict Masquerading to given source subnets"
-msgstr ""
+msgstr "Limita il Masquerading alle subnet sorgente date"
 
 msgid "Restrict to address family"
-msgstr ""
+msgstr "Limita agli indirizzi famiglia"
 
 msgid "Rewrite matched traffic to the given address."
-msgstr ""
+msgstr "Riscrivi il traffico verso l'indirizzo dato."
 
 msgid ""
 "Rewrite matched traffic to the given source port. May be left empty to only "
 "rewrite the IP address."
 msgstr ""
+"Riscrivi il traffico corrispondente alla porta sorgente data. Può essere "
+"lasciato vuoto per riscrivere solo l'indirizzo IP."
 
 msgid "Rewrite to source %s"
-msgstr ""
+msgstr "Riscrivi alla sorgente %s"
 
 msgid "Rewrite to source %s, %s"
-msgstr ""
+msgstr "Riscrivi alla sorgente %s, %s"
 
 msgid "SNAT IP address"
-msgstr ""
+msgstr "Indirizzo IP SNAT"
 
 msgid "SNAT port"
-msgstr ""
+msgstr "Porta SNAT"
 
 msgid "Saturday"
-msgstr ""
+msgstr "Sabato"
 
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua      #
@@ -350,13 +359,17 @@ msgid "Source MAC address"
 msgstr "Indirizzo MAC di origine"
 
 msgid "Source NAT"
-msgstr ""
+msgstr "NAT di origine"
 
 msgid ""
 "Source NAT is a specific form of masquerading which allows fine grained "
 "control over the source IP used for outgoing traffic, for example to map "
 "multiple WAN addresses to internal subnets."
 msgstr ""
+"La sorgente NAT è una forma specifica di masquerading che consente un controllo "
+"preciso sull'IP sorgente usato per il traffico in uscita, per esempio per "
+"mappare indirizzi WAN multipli verso le subnet interne."
+
 
 msgid "Source address"
 msgstr "Indirizzo di origine"
@@ -368,25 +381,25 @@ msgid "Source zone"
 msgstr "Zona di origine"
 
 msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Data di Inizio (yyyy-mm-dd)"
 
 msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ora di Inizio (hh:mm:ss)"
 
 msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Data di Stop (yyyy-mm-dd)"
 
 msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Ora di Stop (hh:mm:ss)"
 
 msgid "Sunday"
-msgstr ""
+msgstr "Domenica"
 
 msgid ""
 "The firewall creates zones over your network interfaces to control network "
 "traffic flow."
 msgstr ""
-"Il firewall crea delle zone nelle tue interfacce di rete per controllareil "
+"Il firewall crea delle zone nelle tue interfacce di rete per controllare il "
 "flusso del traffico."
 
 msgid ""
@@ -397,16 +410,26 @@ msgid ""
 "rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
 "<em>not</em> imply a permission to forward from wan to lan as well."
 msgstr ""
+"Queste opzioni controllano le regole di inoltro tra questa zona (%s) e "
+"altre zone. Le <em>zone di destinazione</em> coprono il traffico inoltrato "
+"<strong>originato da %q</strong>. Le <em>zone di origine</em> corrispondono il "
+"traffico inoltrato da altre zone <strong>che puntano a %q</strong>. La regola di "
+"inoltro è <em>unidirezionale</em>, esempio: un inoltro dalla lan alla wan "
+"<em>non</em> implica anche un permesso da inoltrare dalla wan alla lan."
 
 msgid ""
 "This page allows you to change advanced properties of the port forwarding "
 "entry. In most cases there is no need to modify those settings."
 msgstr ""
+"Questa pagina ti consente di cambiare le opzioni avanzate della voce porta di "
+"inoltro. Nella maggioranza dei casi non serve modificare queste impostazioni."
 
 msgid ""
 "This page allows you to change advanced properties of the traffic rule "
 "entry, such as matched source and destination hosts."
 msgstr ""
+"Questa pagina ti consente di cambiare le opzioni avanzate della voce regola del "
+"traffico, come la sorgente corrispondente e gli host di destinazione."
 
 msgid ""
 "This section defines common properties of %q. The <em>input</em> and "
@@ -415,68 +438,78 @@ msgid ""
 "forwarded traffic between different networks within the zone. <em>Covered "
 "networks</em> specifies which available networks are members of this zone."
 msgstr ""
+"Questa sezione definisce le proprietà comuni di %q. Le opzioni di<em>ingresso</em> "
+"e <em>uscita</em> definiscono le regole di default per il traffico in entrata e "
+"uscita di questa zona mentre l'opzione di <em>inoltro</em> descrive il metodo per il "
+"traffico inoltrato tra reti differenti nella zona. Le <em>reti coperte</em> "
+"specificano quali reti disponibili sono membri di questa zona."
 
 msgid "Thursday"
-msgstr ""
+msgstr "Giovedì"
 
 msgid "Time in UTC"
-msgstr ""
+msgstr "Orario in UTC"
 
 msgid "To %s at %s on <var>this device</var>"
-msgstr ""
+msgstr "Verso %s a %s su <var>questo dispositivo</var>"
 
 msgid "To %s in %s"
-msgstr ""
+msgstr "Verso %s in %s"
 
 msgid "To %s on <var>this device</var>"
-msgstr ""
+msgstr "Verso %s su <var>questo dispositivo</var>"
 
 msgid "To %s, %s in %s"
-msgstr ""
+msgstr "Verso %s, %s in %s"
 
 msgid "To source IP"
-msgstr ""
+msgstr "Verso IP sorgente"
 
 msgid "To source port"
-msgstr ""
+msgstr "Verso la porta sorgente"
 
 msgid "Traffic Rules"
-msgstr ""
+msgstr "Regole di Traffico"
 
 msgid ""
 "Traffic rules define policies for packets traveling between different zones, "
 "for example to reject traffic between certain hosts or to open WAN ports on "
 "the router."
 msgstr ""
+"Le regole del traffico definiscono il metodo per il viaggio dei pacchetti tra "
+"zone differenti, per esempio per rifiutare il traffico tra certi host o per "
+"aprire porte WAN sul router."
 
 msgid "Tuesday"
-msgstr ""
+msgstr "Martedì"
 
 msgid "Via %s"
 msgstr ""
 
 msgid "Via %s at %s"
-msgstr ""
+msgstr "Via %s a %s"
 
 msgid "Wednesday"
-msgstr ""
+msgstr "Mercoledì"
 
 msgid "Week Days"
-msgstr ""
+msgstr "Giorni della Settimana"
 
 msgid ""
 "You may specify multiple by selecting \"-- custom --\" and then entering "
 "protocols separated by space."
 msgstr ""
+"Puoi specificare multipli selezionando \"-- custom --\" e poi inserendo "
+"i protocolli separati da uno spazio."
 
 msgid "Zone %q"
-msgstr ""
+msgstr "Zona %q"
 
 msgid "Zone ⇒ Forwardings"
-msgstr ""
+msgstr "Zona ⇒ Inoltri"
 
 msgid "Zones"
-msgstr ""
+msgstr "Zone"
 
 msgid "accept"
 msgstr "accetta"
@@ -485,22 +518,22 @@ msgid "any"
 msgstr "qualsiasi"
 
 msgid "any host"
-msgstr ""
+msgstr "qualsiasi host"
 
 msgid "any router IP"
-msgstr ""
+msgstr "qualsiasi router IP"
 
 msgid "any zone"
-msgstr ""
+msgstr "qualsiasi zona"
 
 msgid "don't track"
-msgstr ""
+msgstr "non tracciare"
 
 msgid "drop"
-msgstr ""
+msgstr "scarta"
 
 msgid "reject"
 msgstr "rifiuta"
 
 msgid "traffic"
-msgstr ""
+msgstr "traffico"
index 0e8d71c..eb4b06f 100644 (file)
@@ -69,7 +69,7 @@ msgid "Custom Rules"
 msgstr "手動設定ルール"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index f43fdc8..e5e0e87 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Custom Rule"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index b82e2c1..edc9251 100644 (file)
@@ -62,7 +62,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 59167db..e26e365 100644 (file)
@@ -63,7 +63,7 @@ msgid "Custom Rules"
 msgstr "Egendefinerte Regler"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 2eea8c3..77e6a95 100644 (file)
@@ -70,7 +70,7 @@ msgid "Custom Rules"
 msgstr "Własne reguły"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 2d601f8..1ee89cf 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2014-06-21 19:03+0200\n"
-"Last-Translator: Éder <eder.grigorio@openmailbox.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-20 17:43-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
 
 msgid "%s in %s"
 msgstr "%s in %s"
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Regras Personalizadas"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
@@ -143,7 +143,7 @@ msgid "Forward to"
 msgstr "Encaminhar para"
 
 msgid "Friday"
-msgstr ""
+msgstr "Sexta-feira"
 
 msgid "From %s in %s"
 msgstr "Vindo de %s em %s"
@@ -222,10 +222,10 @@ msgstr ""
 "equipamento cliente."
 
 msgid "Monday"
-msgstr ""
+msgstr "Segunda-Feira"
 
 msgid "Month Days"
-msgstr ""
+msgstr "Dias do mês"
 
 msgid "Name"
 msgstr "Nome"
@@ -296,7 +296,7 @@ msgid "Redirect matched incoming traffic to the specified internal host"
 msgstr "Redireciona tráfego entrante para o computador interno especificado"
 
 msgid "Restart Firewall"
-msgstr ""
+msgstr "Reiniciar o Firewall"
 
 msgid "Restrict Masquerading to given destination subnets"
 msgstr "Restringe o mascaramento para uma subrede de destino específica"
@@ -330,7 +330,7 @@ msgid "SNAT port"
 msgstr "Porta da SNAT"
 
 msgid "Saturday"
-msgstr ""
+msgstr "Sábado"
 
 msgid "Source IP address"
 msgstr "Endereço IP de origem"
@@ -360,19 +360,19 @@ msgid "Source zone"
 msgstr "Zona de origem"
 
 msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Dia inicial (aaaa-mm-dd)"
 
 msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "Hora inicial (hh:mm:ss)"
 
 msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "Dia final (aaaa-mm-dd)"
 
 msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "Hora final (hh:mm:ss)"
 
 msgid "Sunday"
-msgstr ""
+msgstr "Domingo"
 
 msgid ""
 "The firewall creates zones over your network interfaces to control network "
@@ -411,7 +411,6 @@ msgstr ""
 "Esta página permite que você mude propriedades avançadas da entrada da regra "
 "de tráfego, como os equipamentos de origem e destino."
 
-#, fuzzy
 msgid ""
 "This section defines common properties of %q. The <em>input</em> and "
 "<em>output</em> options set the default policies for traffic entering and "
@@ -427,10 +426,10 @@ msgstr ""
 "zona."
 
 msgid "Thursday"
-msgstr ""
+msgstr "Quita-feira"
 
 msgid "Time in UTC"
-msgstr ""
+msgstr "Hora em UTC"
 
 msgid "To %s at %s on <var>this device</var>"
 msgstr "Para %s em %s <var>neste dispositivo</var>"
@@ -463,7 +462,7 @@ msgstr ""
 "ou abrir portas WAN no roteador."
 
 msgid "Tuesday"
-msgstr ""
+msgstr "Terça-feira"
 
 msgid "Via %s"
 msgstr "Via %s"
@@ -472,10 +471,10 @@ msgid "Via %s at %s"
 msgstr "Via %s at %s"
 
 msgid "Wednesday"
-msgstr ""
+msgstr "Quarta-feira"
 
 msgid "Week Days"
-msgstr ""
+msgstr "Dias da semana"
 
 msgid ""
 "You may specify multiple by selecting \"-- custom --\" and then entering "
index f552616..d803dfa 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr "Regras Personalizadas"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 69b911e..e0027de 100644 (file)
@@ -67,7 +67,7 @@ msgid "Custom Rules"
 msgstr "Reguli suplimentare"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 98bc92d..be16fec 100644 (file)
@@ -70,7 +70,7 @@ msgid "Custom Rules"
 msgstr "Пользовательские правила"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index f45e74b..1dda5bf 100644 (file)
@@ -63,7 +63,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 2e169fb..f9fd920 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -10,85 +10,85 @@ 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 ""
+msgstr "Tillåt vidarebefordring från <em>källzonerna</em>:"
 
 msgid "Allow forward to <em>destination zones</em>:"
-msgstr ""
+msgstr "Till vidarebefordring till <em>destinationszonerna:</em>:"
 
 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 "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
 
 msgid "Destination IP address"
-msgstr ""
+msgstr "Destinationens IP-adress"
 
 msgid "Destination address"
-msgstr ""
+msgstr "Destinationens adress"
 
 msgid "Destination port"
-msgstr ""
+msgstr "Destinationsport"
 
 msgid "Destination zone"
-msgstr ""
+msgstr "Destinationens zon"
 
 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 ""
@@ -97,111 +97,115 @@ msgid "Enable SYN-flood protection"
 msgstr ""
 
 msgid "Enable logging on this zone"
-msgstr ""
+msgstr "Aktivera loggning i den här zonen"
 
 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 ""
+msgstr "Brandvägg - Vidarebefordring av port"
 
 msgid "Firewall - Traffic Rules"
-msgstr ""
+msgstr "Brandvägg - Trafikregler"
 
 msgid "Firewall - Zone Settings"
-msgstr ""
+msgstr "Brandvägg - Zoninställningar"
 
 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 ""
+msgstr "Från %s i %s med källa %s"
 
 msgid "From %s in %s with source %s and %s"
-msgstr ""
+msgstr "Från %s i %s med källa %s och %s"
 
 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 ""
 
 msgid "Masquerading"
-msgstr ""
+msgstr "Maskering"
 
 msgid "Match"
-msgstr ""
+msgstr "Matcha"
 
 msgid "Match ICMP type"
-msgstr ""
+msgstr "Matchar ICMP-typ"
 
 msgid "Match forwarded traffic to the given destination port or port range."
 msgstr ""
+"Matcha vidarebefordrad trafik till den angivna destinationsporten eller "
+"portens räckvidd."
 
 msgid ""
 "Match incoming traffic directed at the given destination port or port range "
 "on this host"
 msgstr ""
+"Matcha inkommande trafik dirigerad till den angivna destinationsporten eller "
+"portens räckvidd på den här värden"
 
 msgid ""
 "Match incoming traffic originating from the given source port or port range "
@@ -209,28 +213,28 @@ msgid ""
 msgstr ""
 
 msgid "Monday"
-msgstr ""
+msgstr "Måndag"
 
 msgid "Month Days"
-msgstr ""
+msgstr "Dagar i månaden"
 
 msgid "Name"
-msgstr ""
+msgstr "Namn"
 
 msgid "New SNAT rule"
-msgstr ""
+msgstr "Ny SNAT-regel"
 
 msgid "New forward rule"
-msgstr ""
+msgstr "Ny regel för vidarebefordring"
 
 msgid "New input rule"
-msgstr ""
+msgstr "Ny inmatningsregel"
 
 msgid "New port forward"
-msgstr ""
+msgstr "Ny vidarebefordring av port"
 
 msgid "New source NAT"
-msgstr ""
+msgstr "Ny käll-NAT"
 
 msgid "Only match incoming traffic directed at the given IP address."
 msgstr ""
@@ -240,6 +244,7 @@ msgstr ""
 
 msgid "Only match incoming traffic from this IP or range."
 msgstr ""
+"Matcha endast inkommande trafik från den här IP-adressen eller räckvidden."
 
 msgid ""
 "Only match incoming traffic originating from the given source port or port "
@@ -247,19 +252,19 @@ 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 ""
 
 msgid "Port Forwards"
-msgstr ""
+msgstr "Vidarebefordringar av port"
 
 msgid ""
 "Port forwarding allows remote computers on the Internet to connect to a "
@@ -267,7 +272,7 @@ msgid ""
 msgstr ""
 
 msgid "Protocol"
-msgstr ""
+msgstr "Protokoll"
 
 msgid ""
 "Redirect matched incoming traffic to the given port on the internal host"
@@ -277,7 +282,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 +291,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 +302,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 +341,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 +388,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 +412,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 +421,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 +441,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 d1e8eec..bec02d4 100644 (file)
@@ -56,7 +56,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 1b5444f..5bb897c 100644 (file)
@@ -63,7 +63,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 1c4117f..8ca1428 100644 (file)
@@ -67,7 +67,7 @@ msgid "Custom Rules"
 msgstr "Настроювані правила"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index 6c00a6f..9509613 100644 (file)
@@ -68,7 +68,7 @@ msgid "Custom Rules"
 msgstr ""
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
index d36eeea..f21d492 100644 (file)
@@ -1,17 +1,15 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2010-03-30 17:00+0200\n"
-"PO-Revision-Date: 2014-06-14 18:05+0200\n"
-"Last-Translator: jame-he <755085131@qq.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
-"Language: zh_CN\n"
-"MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.6\n"
+"PO-Revision-Date: 2017-10-28 18:56+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "%s in %s"
 msgstr "%s 位于 %s"
@@ -23,22 +21,22 @@ msgid "%s, %s in %s"
 msgstr "%s, %s 位于 %s"
 
 msgid "(Unnamed Entry)"
-msgstr "(未命名条目)"
+msgstr "(未命名条目)"
 
 msgid "(Unnamed Rule)"
-msgstr "(未命名规则)"
+msgstr "(未命名规则)"
 
 msgid "(Unnamed SNAT)"
-msgstr "(未命名SNAT)"
+msgstr "(未命名 SNAT)"
 
 msgid "<var>%d</var> pkts. per <var>%s</var>"
-msgstr "<var>%d</var> 包.每 <var>%s</var>"
+msgstr "<var>%d</var> 数据包。每 <var>%s</var>"
 
 msgid "<var>%d</var> pkts. per <var>%s</var>, burst <var>%d</var> pkts."
-msgstr "<var>%d</var> 包. 每 <var>%s</var>, 突发 <var>%d</var> 包."
+msgstr "<var>%d</var> 数据包。每 <var>%s</var>,突发 <var>%d</var> 数据包。"
 
 msgid "<var>%s</var> and limit to %s"
-msgstr "<var>%s</var> 并限制到 %s"
+msgstr "<var>%s</var> 并限制到 %s"
 
 msgid "Action"
 msgstr "动作"
@@ -53,10 +51,10 @@ msgid "Advanced Settings"
 msgstr "高级设置"
 
 msgid "Allow forward from <em>source zones</em>:"
-msgstr "允许从<em>源区域</em>转发"
+msgstr "允许从<em>源区域</em>转发"
 
 msgid "Allow forward to <em>destination zones</em>:"
-msgstr "允许转发到<em>目标区域</em>"
+msgstr "允许转发到<em>目标区域</em>"
 
 msgid "Any"
 msgstr "任何"
@@ -68,15 +66,15 @@ msgid "Custom Rules"
 msgstr "自定义规则"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
-"自定义规则允许运行一些防火墙没有包含的功能。这些命令将在每次重启防火墙时,在"
-"默认的规则运行后立即执行。"
+"自定义规则允许您执行不属于防火墙框架的任意 iptables 命令。每次重启防火墙时,"
+"在默认的规则运行后这些命令将立即执行。"
 
 msgid "Destination IP address"
-msgstr "目标IP地址"
+msgstr "目标 IP 地址"
 
 msgid "Destination address"
 msgstr "目标地址"
@@ -88,7 +86,7 @@ msgid "Destination zone"
 msgstr "目标区域"
 
 msgid "Do not rewrite"
-msgstr "不填写=(所有端口)"
+msgstr "不重写"
 
 msgid "Drop invalid packets"
 msgstr "丢弃无效数据包"
@@ -97,16 +95,16 @@ msgid "Enable"
 msgstr "启用"
 
 msgid "Enable NAT Loopback"
-msgstr "启用NAT环回"
+msgstr "启用 NAT 环回"
 
 msgid "Enable SYN-flood protection"
-msgstr "启用SYN-flood防御"
+msgstr "启用 SYN-flood 防御"
 
 msgid "Enable logging on this zone"
-msgstr "å\9c¨æ­¤å\8cºå\9f\9få\85\81许è¿\9bå\85¥"
+msgstr "å\90¯ç\94¨æ­¤å\8cºå\9f\9fç\9a\84æ\97¥å¿\97è®°å½\95"
 
 msgid "External IP address"
-msgstr "外部IP地址"
+msgstr "外部 IP 地址"
 
 msgid "External port"
 msgstr "外部端口"
@@ -130,7 +128,7 @@ msgid "Firewall - Traffic Rules"
 msgstr "防火墙 - 通信规则"
 
 msgid "Firewall - Zone Settings"
-msgstr "防火墙-区域设置"
+msgstr "防火墙 - 区域设置"
 
 msgid "Force connection tracking"
 msgstr "强制连接追踪"
@@ -142,16 +140,16 @@ msgid "Forward to"
 msgstr "转发到"
 
 msgid "Friday"
-msgstr ""
+msgstr "星期五"
 
 msgid "From %s in %s"
 msgstr "来自 %s 位于 %s"
 
 msgid "From %s in %s with source %s"
-msgstr "来自 %s 位于 %s 带源 %s"
+msgstr "来自 %s 位于 %s 源于 %s"
 
 msgid "From %s in %s with source %s and %s"
-msgstr "来自 %s 位于 %s 带源 %s 并且 %s"
+msgstr "来自 %s 位于 %s 源端口 %s 源 MAC %s"
 
 msgid "General Settings"
 msgstr "基本设置"
@@ -163,13 +161,13 @@ msgid "IPv4 and IPv6"
 msgstr "IPv4 和 IPv6"
 
 msgid "IPv4 only"
-msgstr "仅IPv4"
+msgstr "仅 IPv4"
 
 msgid "IPv6"
 msgstr "IPv6"
 
 msgid "IPv6 only"
-msgstr "仅IPv6"
+msgstr "仅 IPv6"
 
 msgid "Input"
 msgstr "入站数据"
@@ -178,7 +176,7 @@ msgid "Inter-Zone Forwarding"
 msgstr "端口触发"
 
 msgid "Internal IP address"
-msgstr "内部IP地址"
+msgstr "内部 IP 地址"
 
 msgid "Internal port"
 msgstr "内部端口"
@@ -190,41 +188,41 @@ msgid "Limit log messages"
 msgstr "限制日志信息"
 
 msgid "MSS clamping"
-msgstr "MSS钳制"
+msgstr "MSS 钳制"
 
 msgid "Masquerading"
-msgstr "IP动态伪装"
+msgstr "IP 动态伪装"
 
 msgid "Match"
 msgstr "匹配规则"
 
 msgid "Match ICMP type"
-msgstr "匹配ICMP类型"
+msgstr "匹配 ICMP 类型"
 
 msgid "Match forwarded traffic to the given destination port or port range."
-msgstr "需要匹配转发流量到的目标端口或端口范围"
+msgstr "匹配指定目标端口或目标端口范围的转发流量。"
 
 msgid ""
 "Match incoming traffic directed at the given destination port or port range "
 "on this host"
-msgstr "需要匹配入站流量到的目标端口或端口范围"
+msgstr "匹配指向此主机上指定目标端口或目标端口范围的入站流量。"
 
 msgid ""
 "Match incoming traffic originating from the given source port or port range "
 "on the client host."
-msgstr "需要匹配入站流量的源端口或端口范围"
+msgstr "匹配来自客户端主机上指定源端口或源端口范围的入站流量。"
 
 msgid "Monday"
-msgstr ""
+msgstr "星期一"
 
 msgid "Month Days"
-msgstr ""
+msgstr "日期"
 
 msgid "Name"
 msgstr "名字"
 
 msgid "New SNAT rule"
-msgstr "新建SNAT规则"
+msgstr "新建 SNAT 规则"
 
 msgid "New forward rule"
 msgstr "新建转发规则"
@@ -236,21 +234,21 @@ msgid "New port forward"
 msgstr "新建端口转发"
 
 msgid "New source NAT"
-msgstr "新建Source NAT"
+msgstr "新建 Source NAT"
 
 msgid "Only match incoming traffic directed at the given IP address."
-msgstr "需要匹配入站流量的源IP"
+msgstr "仅匹配指定目的 IP 地址的入站流量。"
 
 msgid "Only match incoming traffic from these MACs."
-msgstr "需要匹配入站流量的源MACs(可以为多个)"
+msgstr "仅匹配来自这些 MAC 的入站流量。"
 
 msgid "Only match incoming traffic from this IP or range."
-msgstr "需要匹配入站流量的源IP或IP范围"
+msgstr "仅匹配来自此 IP 或 IP 范围的入站流量。"
 
 msgid ""
 "Only match incoming traffic originating from the given source port or port "
 "range on the client host"
-msgstr "需要匹配入站流量的源端口或端口范围"
+msgstr "仅匹配源自客户端主机上给定源端口或源端口范围的入站流量。"
 
 msgid "Open ports on router"
 msgstr "打开路由器端口"
@@ -262,7 +260,7 @@ msgid "Output"
 msgstr "出站数据"
 
 msgid "Passes additional arguments to iptables. Use with care!"
-msgstr "传递到iptables的额外参数。小心使用!"
+msgstr "传递到 iptables 的额外参数。小心使用!"
 
 msgid "Port Forwards"
 msgstr "端口转发"
@@ -270,7 +268,8 @@ msgstr "端口转发"
 msgid ""
 "Port forwarding allows remote computers on the Internet to connect to a "
 "specific computer or service within the private LAN."
-msgstr "端口转发允许来自Internet的计算机访问私有局域网内的计算机或服务"
+msgstr ""
+"端口转发允许 Internet 上的远程计算机连接到内部网络中的特定计算机或服务。"
 
 msgid "Protocol"
 msgstr "协议"
@@ -280,27 +279,27 @@ msgid ""
 msgstr "重定向匹配的入站流量到内部主机的端口"
 
 msgid "Redirect matched incoming traffic to the specified internal host"
-msgstr "重定向匹配的入站流量到的内部主机"
+msgstr "重定向匹配的入站流量到指定的内部主机"
 
 msgid "Restart Firewall"
-msgstr ""
+msgstr "重启防火墙"
 
 msgid "Restrict Masquerading to given destination subnets"
-msgstr "要限制IP动态伪装的目标子网"
+msgstr "要限制 IP 动态伪装的目标子网"
 
 msgid "Restrict Masquerading to given source subnets"
-msgstr "要限制IP动态伪装的源子网"
+msgstr "要限制 IP 动态伪装的源子网"
 
 msgid "Restrict to address family"
 msgstr "限制地址"
 
 msgid "Rewrite matched traffic to the given address."
-msgstr "将匹配流量的源地址改写成指定地址"
+msgstr "将匹配流量的源地址改写成指定地址"
 
 msgid ""
 "Rewrite matched traffic to the given source port. May be left empty to only "
 "rewrite the IP address."
-msgstr "将匹配流量的源端口改写成指定端口。也可以留空,只改写IP地址。"
+msgstr "将匹配流量的源端口改写成指定端口。留空只改写 IP 地址。"
 
 msgid "Rewrite to source %s"
 msgstr "源地址改写成 %s"
@@ -309,49 +308,19 @@ msgid "Rewrite to source %s, %s"
 msgstr "源地址改写成 %s, %s"
 
 msgid "SNAT IP address"
-msgstr "SNAT IP地址"
+msgstr "SNAT IP 地址"
 
 msgid "SNAT port"
 msgstr "SNAT 端口"
 
 msgid "Saturday"
-msgstr ""
+msgstr "星期六"
 
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-# Generated from applications/luci-fw/luasrc/model/cbi/luci_fw/rrule.lua      #
-# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
-#
-# msgid "Traffic Redirection"
-# msgstr ""
-#
-# msgid ""
-# "Traffic redirection allows you to change the destination address of "
-# "forwarded packets."
-# msgstr ""
-#
-# msgid "Overview"
-# msgstr ""
-#
-# msgid "Name"
-# msgstr ""
-#
-# msgid "Source zone"
-# msgstr ""
-#
-# msgid "Source MAC-address"
-# msgstr ""
-#
-# msgid "Source port"
-# msgstr ""
-#
-# msgid "Protocol"
-# msgstr ""
-#
 msgid "Source IP address"
-msgstr "源IP地址"
+msgstr "源 IP 地址"
 
 msgid "Source MAC address"
-msgstr "源MAC地址"
+msgstr "源 MAC 地址"
 
 msgid "Source NAT"
 msgstr "Source NAT"
@@ -361,8 +330,8 @@ msgid ""
 "control over the source IP used for outgoing traffic, for example to map "
 "multiple WAN addresses to internal subnets."
 msgstr ""
-"Source NAT是一种特殊形式的封包伪装,它允许精细的控制传出流量的源IP,例如,将"
-"å¤\9a个WAN地址映射到内部子网。"
+"Source NAT 是一种特殊形式的封包伪装,它允许精细的控制传出流量的源 IP,例如:"
+"å°\86å¤\9a个 WAN 地址映射到内部子网。"
 
 msgid "Source address"
 msgstr "源地址"
@@ -374,24 +343,24 @@ msgid "Source zone"
 msgstr "源区域"
 
 msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "开始日期(yyyy-mm-dd)"
 
 msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "开始时间(hh:mm:ss)"
 
 msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "停止日期(yyyy-mm-dd)"
 
 msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "停止时间(hh:mm:ss)"
 
 msgid "Sunday"
-msgstr ""
+msgstr "星期日"
 
 msgid ""
 "The firewall creates zones over your network interfaces to control network "
 "traffic flow."
-msgstr "防火墙把网络接口分为不同的区域进行管理"
+msgstr "防火墙通过在网络接口上创建区域来控制网络流量。"
 
 msgid ""
 "The options below control the forwarding policies between this zone (%s) and "
@@ -401,10 +370,10 @@ msgid ""
 "rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
 "<em>not</em> imply a permission to forward from wan to lan as well."
 msgstr ""
-"以下选项可以控制区域(%s)和其它区域间的转发规则。 <em>目标区域</em>接收"
-"<strong>从%q</strong>转发的流量。<em>源区域</em>匹配从<strong>目标为%q</"
-"strong>的区域的需转发流量。以下规则<em>无法转发</em>,例如:转发lan流量到wan,"
-"ä½\86æ\98¯<em>ä¸\8då\85\81许</em>ä»\8ewan转å\8f\91å\88°lan。"
+"以下选项可以控制区域(%s)和其它区域间的转发规则。<em>目标区域</em>接收"
+"<strong>源自 %q</strong> 的转发流量。<em>源区域</em>匹配从<strong>目标为 %q</"
+"strong> 的区域的需转发流量。转发规则的作用是<em>单向</em>的,例如:一条允许"
+"ä»\8e lan å\88° wan ç\9a\84转å\8f\91è§\84å\88\99并ä¸\8dé\9a\90å\90«æ\9c\89å\85\81许ç\9b¸å\8f\8dæ\96¹å\90\91ä»\8e wan å\88° lan ç\9a\84æµ\81é\87\8f转å\8f\91。"
 
 msgid ""
 "This page allows you to change advanced properties of the port forwarding "
@@ -416,7 +385,6 @@ msgid ""
 "entry, such as matched source and destination hosts."
 msgstr "本页面可以更改通信规则的高级设置,比如:需匹配的源主机和目标主机。"
 
-#, fuzzy
 msgid ""
 "This section defines common properties of %q. The <em>input</em> and "
 "<em>output</em> options set the default policies for traffic entering and "
@@ -424,19 +392,18 @@ msgid ""
 "forwarded traffic between different networks within the zone. <em>Covered "
 "networks</em> specifies which available networks are members of this zone."
 msgstr ""
-"本节定义 %q 的通用属性, <em>入站数据</em> 和 <em>出站数据</em>规则用于设置数"
-"据包“进”和“出”路由器(某个接口)默认的转发原则,<em>转发</em>规则用于特定(一"
-"个或多个)区域的不同子网之间的数据包转发。<em>覆盖网络</em>选择从属于这个区域"
-"的网络。"
+"本节定义 %q 的通用属性,<em>入站数据</em>和<em>出站数据</em>选项用于设置此区"
+"域入站和出站流量的默认策略,<em>转发</em>选项描述该区域内不同网络之间的流量转"
+"发策略。<em>覆盖网络</em>指定从属于这个区域的网络。"
 
 msgid "Thursday"
-msgstr ""
+msgstr "星期四"
 
 msgid "Time in UTC"
-msgstr ""
+msgstr "UTC 时间"
 
 msgid "To %s at %s on <var>this device</var>"
-msgstr "到 %s at %s 位于<var>本设备</var>"
+msgstr "到 %s  %s 位于<var>本设备</var>"
 
 msgid "To %s in %s"
 msgstr "到 %s 位于 %s"
@@ -448,7 +415,7 @@ msgid "To %s, %s in %s"
 msgstr "到 %s, %s 位于 %s"
 
 msgid "To source IP"
-msgstr "到源IP"
+msgstr "到源 IP"
 
 msgid "To source port"
 msgstr "到源端口"
@@ -461,28 +428,28 @@ msgid ""
 "for example to reject traffic between certain hosts or to open WAN ports on "
 "the router."
 msgstr ""
-"é\80\9aä¿¡è§\84å\88\99å®\9aä¹\89äº\86ä¸\8då\90\8cå\8cºå\9f\9fé\97´ç\9a\84æµ\81é\87\8fä¼ é\80\81ï¼\8cä¾\8bå¦\82ï¼\9aæ\8b\92ç»\9dä¸\80äº\9b主æ\9cºä¹\8bé\97´ç\9a\84é\80\9aä¿¡ã\80\81æ\89\93å¼\80å\88°WANç\9a\84"
-"端口。"
+"é\80\9aä¿¡è§\84å\88\99å®\9aä¹\89äº\86ä¸\8då\90\8cå\8cºå\9f\9fé\97´ç\9a\84æ\95°æ\8d®å\8c\85ä¼ è¾\93ç­\96ç\95¥ï¼\8cä¾\8bå¦\82ï¼\9aæ\8b\92ç»\9dä¸\80äº\9b主æ\9cºä¹\8bé\97´ç\9a\84é\80\9aä¿¡ï¼\8cå¼\80æ\94¾"
+"路由器 WAN 上的端口。"
 
 msgid "Tuesday"
-msgstr ""
+msgstr "星期二"
 
 msgid "Via %s"
 msgstr "通过 %s"
 
 msgid "Via %s at %s"
-msgstr "通过 %s at %s"
+msgstr "通过 %s  %s"
 
 msgid "Wednesday"
-msgstr ""
+msgstr "星期三"
 
 msgid "Week Days"
-msgstr ""
+msgstr "星期"
 
 msgid ""
 "You may specify multiple by selecting \"-- custom --\" and then entering "
 "protocols separated by space."
-msgstr "也可以选择“--自定义--”来定义多个协议,在多个协议间需加空格。"
+msgstr "也可以选择“--自定义--”来定义多个协议,在多个协议间需加空格。"
 
 msgid "Zone %q"
 msgstr "区域 %q"
@@ -503,13 +470,13 @@ msgid "any host"
 msgstr "所有主机"
 
 msgid "any router IP"
-msgstr "所有路由地址"
+msgstr "所有路由 IP"
 
 msgid "any zone"
 msgstr "所有区域"
 
 msgid "don't track"
-msgstr "无动作"
+msgstr "不跟踪"
 
 msgid "drop"
 msgstr "丢弃"
@@ -518,4 +485,4 @@ msgid "reject"
 msgstr "拒绝"
 
 msgid "traffic"
-msgstr "交通"
+msgstr "通信"
index b89cfab..39d6772 100644 (file)
@@ -1,42 +1,42 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-21 12:45+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
-"Language: zh_TW\n"
-"MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
-"X-Generator: Pootle 2.0.6\n"
+"PO-Revision-Date: 2017-10-28 18:56+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "%s in %s"
-msgstr "%s 在 %s 之中"
+msgstr "%s 位於 %s"
 
 msgid "%s%s with %s"
-msgstr "%s%s å\90\8c %s"
+msgstr "%s%s å\92\8c %s"
 
 msgid "%s, %s in %s"
-msgstr " %s, %s 在 %s 之中"
+msgstr "%s, %s 位於 %s"
 
 msgid "(Unnamed Entry)"
-msgstr "(未命名的項目)"
+msgstr "(未命名條目)"
 
 msgid "(Unnamed Rule)"
-msgstr "(未命名的規則)"
+msgstr "(未命名規則)"
 
 msgid "(Unnamed SNAT)"
-msgstr "(未命名的來源NAT)"
+msgstr "(未命名 SNAT)"
 
 msgid "<var>%d</var> pkts. per <var>%s</var>"
-msgstr "<var>%d</var> 封包數. 每<var>%s</var>"
+msgstr "<var>%d</var> 資料包。每 <var>%s</var>"
 
 msgid "<var>%d</var> pkts. per <var>%s</var>, burst <var>%d</var> pkts."
-msgstr "<var>%d</var> 封包數. 每<var>%s</var>, 爆量 <var>%d</var> 封包數."
+msgstr "<var>%d</var> 資料包。每 <var>%s</var>,突發 <var>%d</var> 資料包。"
 
 msgid "<var>%s</var> and limit to %s"
-msgstr "<var>%s</var> ä¸\94限制到 %s"
+msgstr "<var>%s</var> ä¸¦限制到 %s"
 
 msgid "Action"
 msgstr "動作"
@@ -48,63 +48,63 @@ msgid "Add and edit..."
 msgstr "新增並編輯..."
 
 msgid "Advanced Settings"
-msgstr "é\80²階設定"
+msgstr "é«\98階設定"
 
 msgid "Allow forward from <em>source zones</em>:"
-msgstr "允許從<em>source zones</em>轉發:"
+msgstr "允許從<em>源區域</em>轉發:"
 
 msgid "Allow forward to <em>destination zones</em>:"
-msgstr "允許從 <em>destination zones</em>轉發:"
+msgstr "允許轉發到<em>目標區域</em>:"
 
 msgid "Any"
-msgstr "任"
+msgstr "任"
 
 msgid "Covered networks"
-msgstr "已覆蓋的網路"
+msgstr "覆蓋網路"
 
 msgid "Custom Rules"
-msgstr "自訂的規則群"
+msgstr "自定義規則"
 
 msgid ""
-"Custom rules allow you to execute arbritary iptables commands which are not "
+"Custom rules allow you to execute arbitrary iptables commands which are not "
 "otherwise covered by the firewall framework. The commands are executed after "
 "each firewall restart, right after the default ruleset has been loaded."
 msgstr ""
-"自定義規則允許你執行這是不以其他方式涉及的防火牆框架arbritary的iptables命令。"
-"該å\91½ä»¤æ\98¯æ¯\8få\80\8bé\98²ç\81«ç\89\86é\87\8då\95\9få¾\8cå\9f·è¡\8cï¼\8cé»\98èª\8dè¦\8få\89\87é\9b\86å·²ç¶\93å\8a è¼\89ä¹\8bå¾\8cã\80\82"
+"自定義規則允許您執行不屬於防火牆框架的任意 iptables 命令。每次重啟防火牆時,"
+"å\9c¨é \90設ç\9a\84è¦\8få\89\87å\9f·è¡\8cå¾\8cé\80\99äº\9bå\91½ä»¤å°\87ç«\8bå\8d³å\9f·è¡\8cã\80\82"
 
 msgid "Destination IP address"
-msgstr "目標IP位址"
+msgstr "目標 IP 位址"
 
 msgid "Destination address"
 msgstr "目標位址"
 
 msgid "Destination port"
-msgstr "目埠"
+msgstr "目埠"
 
 msgid "Destination zone"
-msgstr "目標區"
+msgstr "目標區"
 
 msgid "Do not rewrite"
-msgstr "不要改寫"
+msgstr "不寫"
 
 msgid "Drop invalid packets"
-msgstr "丟棄不正確的封包群"
+msgstr "丟棄無效資料包"
 
 msgid "Enable"
 msgstr "啟用"
 
 msgid "Enable NAT Loopback"
-msgstr "å\95\93ç\94¨NATå\9b\9eå\82³"
+msgstr "å\95\9fç\94¨ NAT ç\92°å\9b\9e"
 
 msgid "Enable SYN-flood protection"
-msgstr "啟用SYN-flood攻擊的保護"
+msgstr "啟用 SYN-flood 防禦"
 
 msgid "Enable logging on this zone"
-msgstr "å\95\9fç\94¨æ\97¥èª\8cè¨\98é\8c\84é\80\99å\8d\80"
+msgstr "å\95\9fç\94¨æ­¤å\8d\80å\9f\9fç\9a\84æ\97¥èª\8cè¨\98é\8c\84"
 
 msgid "External IP address"
-msgstr "外部IP位址"
+msgstr "外部 IP 位址"
 
 msgid "External port"
 msgstr "外部埠"
@@ -113,22 +113,22 @@ msgid "External zone"
 msgstr "外部區域"
 
 msgid "Extra arguments"
-msgstr "é¡\8då¤\96å\8f\83數"
+msgstr "é\99\84å\8a å¼\95數"
 
 msgid "Firewall"
 msgstr "防火牆"
 
 msgid "Firewall - Custom Rules"
-msgstr "防火牆-自訂規則"
+msgstr "防火牆 - 自定義規則"
 
 msgid "Firewall - Port Forwards"
-msgstr "防火牆-埠轉發"
+msgstr "防火牆 - 埠轉發"
 
 msgid "Firewall - Traffic Rules"
-msgstr "防火牆-流量規則"
+msgstr "防火牆 - 通訊規則"
 
 msgid "Firewall - Zone Settings"
-msgstr "防火牆-區域設定"
+msgstr "防火牆 - 區域設定"
 
 msgid "Force connection tracking"
 msgstr "強制連線追蹤"
@@ -140,19 +140,19 @@ msgid "Forward to"
 msgstr "轉發到"
 
 msgid "Friday"
-msgstr ""
+msgstr "星期五"
 
 msgid "From %s in %s"
-msgstr "從%s在%s"
+msgstr "來自 %s 位於 %s"
 
 msgid "From %s in %s with source %s"
-msgstr "從%s在%s與來源%"
+msgstr "來自 %s 位於 %s 源於 %s"
 
 msgid "From %s in %s with source %s and %s"
-msgstr "從%s在%s與來源%s和%s"
+msgstr "來自 %s 位於 %s 源埠 %s 源 MAC %s"
 
 msgid "General Settings"
-msgstr "ä¸\80è\88¬è¨­å®\9a"
+msgstr "å\9fºæ\9c¬è¨­å®\9a"
 
 msgid "IPv4"
 msgstr "IPv4"
@@ -161,205 +161,206 @@ msgid "IPv4 and IPv6"
 msgstr "IPv4 和 IPv6"
 
 msgid "IPv4 only"
-msgstr "僅IPv4"
+msgstr "僅 IPv4"
 
 msgid "IPv6"
 msgstr "IPv6"
 
 msgid "IPv6 only"
-msgstr "僅IPv6"
+msgstr "僅 IPv6"
 
 msgid "Input"
-msgstr "輸入"
+msgstr "入站資料"
 
 msgid "Inter-Zone Forwarding"
-msgstr "å\85§é\83¨-å\8d\80è½\89發"
+msgstr "å\9f è§¸發"
 
 msgid "Internal IP address"
-msgstr "內部的IP位址"
+msgstr "內部 IP 位址"
 
 msgid "Internal port"
-msgstr "內部的埠號"
+msgstr "內部"
 
 msgid "Internal zone"
-msgstr "內部區"
+msgstr "內部區"
 
 msgid "Limit log messages"
-msgstr "é\99\90å\88¶æ\97¥èª\8cè¨\8aæ\81¯æ\95¸"
+msgstr "é\99\90å\88¶æ\97¥èª\8cè³\87è¨\8a"
 
 msgid "MSS clamping"
-msgstr "MSS調節"
+msgstr "MSS 鉗制"
 
 msgid "Masquerading"
-msgstr "偽裝"
+msgstr "IP 動態偽裝"
 
 msgid "Match"
-msgstr "匹配"
+msgstr "匹配規則"
 
 msgid "Match ICMP type"
-msgstr "匹配的ICMP型態"
+msgstr "匹配 ICMP 型別"
 
 msgid "Match forwarded traffic to the given destination port or port range."
-msgstr "匹配已轉發的流量到給定的目標埠或者範圍埠"
+msgstr "匹配指定目標埠或目標埠範圍的轉發流量。"
 
 msgid ""
 "Match incoming traffic directed at the given destination port or port range "
 "on this host"
-msgstr "匹配輸入的流量到主機上給定的目標埠或者範圍埠"
+msgstr "匹配指向此主機上指定目標埠或目標埠範圍的入站流量。"
 
 msgid ""
 "Match incoming traffic originating from the given source port or port range "
 "on the client host."
-msgstr "å¾\9e給å®\9aç\9a\84ä¾\86æº\90å\9f æ\88\96ç¯\84å\9c\8då\9f å\9c¨å®¢æ\88¶ç«¯ä¸»æ©\9fä¸\8aç\9a\84å\8c¹é\85\8då\82³å\85¥æµ\81é\87\8få§\8bç\99¼。"
+msgstr "å\8c¹é\85\8dä¾\86è\87ªå®¢æ\88¶ç«¯ä¸»æ©\9fä¸\8aæ\8c\87å®\9aæº\90å\9f æ\88\96æº\90å\9f ç¯\84å\9c\8dç\9a\84å\85¥ç«\99æµ\81é\87\8f。"
 
 msgid "Monday"
-msgstr ""
+msgstr "星期一"
 
 msgid "Month Days"
-msgstr ""
+msgstr "日期"
 
 msgid "Name"
-msgstr "名"
+msgstr "名"
 
 msgid "New SNAT rule"
-msgstr "新的來源NAT規則"
+msgstr "新建 SNAT 規則"
 
 msgid "New forward rule"
-msgstr "新轉發規則"
+msgstr "新轉發規則"
 
 msgid "New input rule"
-msgstr "新入規則"
+msgstr "新建進入規則"
 
 msgid "New port forward"
-msgstr "新轉發埠"
+msgstr "新建埠轉發"
 
 msgid "New source NAT"
-msgstr "新來源埠"
+msgstr "新建 Source NAT"
 
 msgid "Only match incoming traffic directed at the given IP address."
-msgstr "僅匹配傳入流量予給定的IP地址."
+msgstr "僅匹配指定目的 IP 位址的入站流量。"
 
 msgid "Only match incoming traffic from these MACs."
-msgstr "僅匹配從這些MAC群的傳入流量."
+msgstr "僅匹配來自這些 MAC 的入站流量。"
 
 msgid "Only match incoming traffic from this IP or range."
-msgstr "僅匹配從這個IP或範圍IP給傳入流量."
+msgstr "僅匹配來自此 IP 或 IP 範圍的入站流量。"
 
 msgid ""
 "Only match incoming traffic originating from the given source port or port "
 "range on the client host"
-msgstr "僅匹配從給定的來源埠或範圍埠的客戶端主機上給傳入流量."
+msgstr "僅匹配源自客戶端主機上給定源埠或源埠範圍的入站流量。"
 
 msgid "Open ports on router"
-msgstr "開啟路由器上的埠號群"
+msgstr "開啟路由器"
 
 msgid "Other..."
 msgstr "其它..."
 
 msgid "Output"
-msgstr "輸出"
+msgstr "出站資料"
 
 msgid "Passes additional arguments to iptables. Use with care!"
-msgstr "通行額外的參數到 iptables上. 使用要小心!"
+msgstr "傳遞到 iptables 的額外引數。小心使用!"
 
 msgid "Port Forwards"
-msgstr "埠轉"
+msgstr "埠轉"
 
 msgid ""
 "Port forwarding allows remote computers on the Internet to connect to a "
 "specific computer or service within the private LAN."
-msgstr "埠轉發允許遠端網際網路上的電腦來連接到在私人區網內指定的電腦或服務."
+msgstr ""
+"埠轉發允許 Internet 上的遠端計算機連線到內部網路中的特定計算機或服務。"
 
 msgid "Protocol"
-msgstr "協"
+msgstr "協"
 
 msgid ""
 "Redirect matched incoming traffic to the given port on the internal host"
-msgstr "é\87\8då°\8eå\90\91å·²å\8c¹é\85\8då\82³å\85¥æµ\81é\87\8få\88°å\85§é\83¨ä¸»æ©\9fä¸\8aç\9a\84æ\8c\87å®\9a埠"
+msgstr "é\87\8då®\9aå\90\91å\8c¹é\85\8dç\9a\84å\85¥ç«\99æµ\81é\87\8få\88°å\85§é\83¨ä¸»æ©\9fç\9a\84埠"
 
 msgid "Redirect matched incoming traffic to the specified internal host"
-msgstr "é\87\8då°\8eå\90\91å·²å\8c¹é\85\8då\82³å\85¥æµ\81é\87\8få\88°å\85§é\83¨ä¸»æ©\9fä¸\8a"
+msgstr "é\87\8då®\9aå\90\91å\8c¹é\85\8dç\9a\84å\85¥ç«\99æµ\81é\87\8få\88°æ\8c\87å®\9aç\9a\84å\85§é\83¨ä¸»æ©\9f"
 
 msgid "Restart Firewall"
-msgstr ""
+msgstr "重啟防火牆"
 
 msgid "Restrict Masquerading to given destination subnets"
-msgstr "限制偽裝到已給予的目標子網路"
+msgstr "要限制 IP 動態偽裝的目標子網"
 
 msgid "Restrict Masquerading to given source subnets"
-msgstr "限制偽裝到已給予的來源子網路"
+msgstr "要限制 IP 動態偽裝的源子網"
 
 msgid "Restrict to address family"
-msgstr "限制的位址群"
+msgstr "限制位址"
 
 msgid "Rewrite matched traffic to the given address."
-msgstr "改寫已匹配的流量到給定的位址."
+msgstr "將匹配流量的源位址改寫成指定位址。"
 
 msgid ""
 "Rewrite matched traffic to the given source port. May be left empty to only "
 "rewrite the IP address."
-msgstr "改寫已匹配的流量到給定的來源埠. 或許可以保留空白到唯一改寫的IP位址."
+msgstr "將匹配流量的源埠改寫成指定埠。留空只改寫 IP 位址。"
 
 msgid "Rewrite to source %s"
-msgstr "æ\94¹å¯«å\88°ä¾\86æº\90 %s"
+msgstr "æº\90ä½\8då\9d\80æ\94¹å¯«æ\88\90 %s"
 
 msgid "Rewrite to source %s, %s"
-msgstr "æ\94¹å¯«å\88°ä¾\86æº\90 %s, %s"
+msgstr "æº\90ä½\8då\9d\80æ\94¹å¯«æ\88\90 %s, %s"
 
 msgid "SNAT IP address"
-msgstr "來源NAT IP 位址"
+msgstr "SNAT IP 位址"
 
 msgid "SNAT port"
-msgstr "來源NAT IP 埠"
+msgstr "SNAT 埠"
 
 msgid "Saturday"
-msgstr ""
+msgstr "星期六"
 
 msgid "Source IP address"
-msgstr "源 IP 位址"
+msgstr "源 IP 位址"
 
 msgid "Source MAC address"
-msgstr "來源 MAC硬體位址"
+msgstr "源 MAC 位址"
 
 msgid "Source NAT"
-msgstr "來源NAT"
+msgstr "Source NAT"
 
 msgid ""
 "Source NAT is a specific form of masquerading which allows fine grained "
 "control over the source IP used for outgoing traffic, for example to map "
 "multiple WAN addresses to internal subnets."
 msgstr ""
-"來源NAT是偽裝的一種特殊形式,它允許對輸出流量的來源IP進行精細控制, 例如要對映"
-"å\88°å¤\9aå\80\8bWANä½\8då\9d\80å\88°å\85§é\83¨å­\90網路群ä¸\8a."
+"Source NAT 是一種特殊形式的封包偽裝,它允許精細的控制傳出流量的源 IP,例如:"
+"å°\87å¤\9aå\80\8b WAN ä½\8då\9d\80å°\8dæ\98 å\88°å\85§é\83¨å­\90網ã\80\82"
 
 msgid "Source address"
-msgstr "源位址"
+msgstr "源位址"
 
 msgid "Source port"
-msgstr "源埠"
+msgstr "源埠"
 
 msgid "Source zone"
-msgstr "來源區"
+msgstr "源區域"
 
 msgid "Start Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "開始日期(yyyy-mm-dd)"
 
 msgid "Start Time (hh:mm:ss)"
-msgstr ""
+msgstr "開始時間(hh:mm:ss)"
 
 msgid "Stop Date (yyyy-mm-dd)"
-msgstr ""
+msgstr "停止日期(yyyy-mm-dd)"
 
 msgid "Stop Time (hh:mm:ss)"
-msgstr ""
+msgstr "停止時間(hh:mm:ss)"
 
 msgid "Sunday"
-msgstr ""
+msgstr "星期日"
 
 msgid ""
 "The firewall creates zones over your network interfaces to control network "
 "traffic flow."
-msgstr "防火牆對你的網路建立區域以便控制網路流向."
+msgstr "防火牆通過在網路介面上建立區域來控制網路流量。"
 
 msgid ""
 "The options below control the forwarding policies between this zone (%s) and "
@@ -369,22 +370,21 @@ msgid ""
 "rule is <em>unidirectional</em>, e.g. a forward from lan to wan does "
 "<em>not</em> imply a permission to forward from wan to lan as well."
 msgstr ""
-"下列的選項控制這區域(%s)和其它區轉發策略.<em>目地區</em> 覆蓋<strong>從 %q 起"
-"源的 </strong>已轉發的流量.<em>來源區</em>匹配從其它區域<strong>針對 %q</"
-"strong>的轉發流量.轉發規則是<em>單向的</em>."
+"以下選項可以控制區域(%s)和其它區域間的轉發規則。<em>目標區域</em>接收"
+"<strong>源自 %q</strong> 的轉發流量。<em>源區域</em>匹配從<strong>目標為 %q</"
+"strong> 的區域的需轉發流量。轉發規則的作用是<em>單向</em>的,例如:一條允許"
+"從 lan 到 wan 的轉發規則並不隱含有允許相反方向從 wan 到 lan 的流量轉發。"
 
 msgid ""
 "This page allows you to change advanced properties of the port forwarding "
 "entry. In most cases there is no need to modify those settings."
-msgstr ""
-"這頁面允許你修改這個轉發埠項目的進階選項. 在大多數情況下,不需要修改這些設定."
+msgstr "本頁面可以更改埠轉發的高階設定。大多數情況下,不需要更改這些設定。"
 
 msgid ""
 "This page allows you to change advanced properties of the traffic rule "
 "entry, such as matched source and destination hosts."
-msgstr "這頁面允許改變進階流量規則項目的進階設置, 例如匹配的來源和目標主機."
+msgstr "本頁面可以更改通訊規則的高階設定,比如:需匹配的源主機和目標主機。"
 
-#, fuzzy
 msgid ""
 "This section defines common properties of %q. The <em>input</em> and "
 "<em>output</em> options set the default policies for traffic entering and "
@@ -392,91 +392,91 @@ msgid ""
 "forwarded traffic between different networks within the zone. <em>Covered "
 "networks</em> specifies which available networks are members of this zone."
 msgstr ""
-"本節定義 %q 的通用屬性.在<em>輸入</em>和<em>輸出</em>選項設置交通進出的默認策"
-"略,而在<em>轉發</em>的選項描述在這區域內不同網路的轉發流量.<em>已覆蓋的網路群"
-"</em>指定特定區域成員可以是被運用的網路."
+"本節定義 %q 的通用屬性,<em>入站資料</em>和<em>出站資料</em>選項用於設定此區"
+"域入站和出站流量的預設策略,<em>轉發</em>選項描述該區域內不同網路之間的流量轉"
+"發策略。<em>覆蓋網路</em>指定從屬於這個區域的網路。"
 
 msgid "Thursday"
-msgstr ""
+msgstr "星期四"
 
 msgid "Time in UTC"
-msgstr ""
+msgstr "UTC 時間"
 
 msgid "To %s at %s on <var>this device</var>"
-msgstr "到%s在上的<var>此設備</var>的%s的"
+msgstr "到 %s 在 %s 位於<var>本裝置</var>"
 
 msgid "To %s in %s"
-msgstr "到%s在%s"
+msgstr "到 %s 位於 %s"
 
 msgid "To %s on <var>this device</var>"
-msgstr "到%s上的<var>此設備</var>的"
+msgstr "到 %s 位於<var>本裝置</var>"
 
 msgid "To %s, %s in %s"
-msgstr "到%s,%s的%s中"
+msgstr "到 %s, %s 位於 %s"
 
 msgid "To source IP"
-msgstr "來源IP"
+msgstr "到源 IP"
 
 msgid "To source port"
-msgstr "源埠"
+msgstr "源埠"
 
 msgid "Traffic Rules"
-msgstr "流量規則"
+msgstr "通訊規則"
 
 msgid ""
 "Traffic rules define policies for packets traveling between different zones, "
 "for example to reject traffic between certain hosts or to open WAN ports on "
 "the router."
 msgstr ""
-"流量規則定義在不同區域之間竄行封包的策略,例如要拒絕特定主機群的流量或者要打開"
-"路由器上WAN埠。"
+"通訊規則定義了不同區域間的資料包傳輸策略,例如:拒絕一些主機之間的通訊,開放"
+"路由器 WAN 上的埠。"
 
 msgid "Tuesday"
-msgstr ""
+msgstr "星期二"
 
 msgid "Via %s"
-msgstr "通過%s的"
+msgstr "通過 %s"
 
 msgid "Via %s at %s"
-msgstr "通過%s在%s的"
+msgstr "通過 %s 在 %s"
 
 msgid "Wednesday"
-msgstr ""
+msgstr "星期三"
 
 msgid "Week Days"
-msgstr ""
+msgstr "星期"
 
 msgid ""
 "You may specify multiple by selecting \"-- custom --\" and then entering "
 "protocols separated by space."
-msgstr "你可以以選擇\"-- 自訂 --\"並且打入由空格分開的協定來做多重指定."
+msgstr "您也可以選擇“--自定義--”來定義多個協議,在多個協議間需加空格。"
 
 msgid "Zone %q"
 msgstr "區域 %q"
 
 msgid "Zone ⇒ Forwardings"
-msgstr "區域 ⇒ 轉發進行"
+msgstr "區域 ⇒ 轉發"
 
 msgid "Zones"
-msgstr "域"
+msgstr "域"
 
 msgid "accept"
 msgstr "接受"
 
 msgid "any"
-msgstr "任意"
+msgstr "所有"
 
 msgid "any host"
-msgstr "任意埠"
+msgstr "所有主機"
 
 msgid "any router IP"
-msgstr "任意路由器IP"
+msgstr "所有路由 IP"
 
 msgid "any zone"
-msgstr "任意區"
+msgstr "所有區域"
 
 msgid "don't track"
-msgstr "ä¸\8dè¦\81追蹤"
+msgstr "ä¸\8dè·\9f蹤"
 
 msgid "drop"
 msgstr "丟棄"
@@ -485,10 +485,4 @@ msgid "reject"
 msgstr "拒絕"
 
 msgid "traffic"
-msgstr ""
-
-#~ msgid "-- Please choose --"
-#~ msgstr "-- 請選擇 --"
-
-#~ msgid "-- custom --"
-#~ msgstr "-- 自訂 --"
+msgstr "通訊"
index ff0aabc..6a07b1d 100644 (file)
@@ -33,7 +33,7 @@ msgid ""
 "connection as a fallback. If you do not want this and instead block that "
 "traffic then you should select this option."
 msgstr ""
-"如果没有缺省的mesh网络路由,则使用属于防火墙区域内的Internet连接作为备用路由。如果你不想要这个,而是阻止该流量,那么你应该选择此选项。"
+"如果没有缺省的mesh网络路由,则使用属于防火墙区域内的Internet连接作为备用路由。如果您不想要这个,而是阻止该流量,那么您应该选择此选项。"
 
 msgid ""
 "If your own gateway is not available then fallback to the mesh default "
@@ -53,5 +53,5 @@ msgid ""
 "'Ego Mode'). Your own traffic is then sent via your internet connection "
 "while traffic originating from the mesh will use another gateway in the mesh."
 msgstr ""
-"这些页面用于某些防火墙区域设置策略路由。这是非常有用的,如果你需要自己使用自己的互联网连接,但你不想把它分享给其他人(这就是为什么它也被称为“自我模式'"
-")。你自己的流量,通过你的互联网连接发送,而mesh中的数据包将使用mesh中另外的网关。"
+"这些页面用于某些防火墙区域设置策略路由。这是非常有用的,如果您需要自己使用自己的互联网连接,但您不想把它分享给其他人(这就是为什么它也被称为“自我模式'"
+")。您自己的流量,通过您的互联网连接发送,而mesh中的数据包将使用mesh中另外的网关。"
index 3fbd88a..ba7a856 100644 (file)
@@ -8,8 +8,6 @@ include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=Fwknopd config - web config for the firewall knock daemon
 LUCI_DEPENDS:=+fwknopd +qrencode
-PKG_VERSION:=1.0
-PKG_RELEASE:=1
 PKG_LICENSE:=GPLv2
 PKG_MAINTAINER:=Jonathan Bennett <JBennett@incomsystems.biz>
 include ../../luci.mk
diff --git a/applications/luci-app-fwknopd/po/pt-br/fwknopd.po b/applications/luci-app-fwknopd/po/pt-br/fwknopd.po
new file mode 100644 (file)
index 0000000..286b49d
--- /dev/null
@@ -0,0 +1,116 @@
+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 ""
+"Allow SPA clients to request access to services through an iptables firewall "
+"instead of just to it."
+msgstr ""
+"Permitir que clientes SPA requeiram acesso a serviços através de um firewall "
+"iptables ao invés de apenas fazê-lo."
+
+msgid "Allow SPA clients to request forwarding destination by DNS name."
+msgstr ""
+"Permitir que clientes SPA requeiram encaminhamento de destinos por nome DNS."
+
+msgid "Base 64 key"
+msgstr "Chave em formato base64"
+
+msgid ""
+"Define a set of ports and protocols (tcp or udp) that will be opened if a "
+"valid knock sequence is seen. If this entry is not set, fwknopd will attempt "
+"to honor any proto/port request specified in the SPA data (unless of it "
+"matches any “RESTRICT_PORTS” entries). Multiple entries are comma-separated."
+msgstr ""
+"Define um conjunto de porta e protocolos (TCP ou UDP) que serão abertos se "
+"uma sequência de batidas for observada. Se esta entrada não estiver "
+"definida, fwknopd irá tentar honrar qualquer requisição de protocolo/porta "
+"especificada nos dados SPA (a não ser se casar com qualquer entrada de "
+"\"RESTRICT_PORTS\"). Múltiplas entradas serão separadas por vírgula."
+
+msgid ""
+"Define the length of time access will be granted by fwknopd through the "
+"firewall after a valid knock sequence from a source IP address. If "
+"“FW_ACCESS_TIMEOUT” is not set then the default timeout of 30 seconds will "
+"automatically be set."
+msgstr ""
+"Define a duração do tempo de acesso que será concedido pelo fwknopd através "
+"do firewall depois de uma sequência de batidas válida de um endereço IP. Se "
+"“FW_ACCESS_TIMEOUT” não estiver definido, o valor padrão será de 30 "
+"segundos. "
+
+msgid ""
+"Define the symmetric key used for decrypting an incoming SPA packet that is "
+"encrypted by the fwknop client with Rijndael."
+msgstr ""
+"Define a chave simétrica usada para decifrar um pacote SPA entrante que foi "
+"cifrado pelo cliente fwknop com o algoritmo Rijndael."
+
+msgid "Enable Uci/Luci control"
+msgstr "Habilitar o controle UCI/Luci"
+
+msgid "Enable config overwrite"
+msgstr "Habilitar a sobrescrita da configuração"
+
+msgid "Firewall Knock Daemon"
+msgstr "Servidor do Firwall Knock"
+
+msgid "Firewall Knock Operator"
+msgstr "Operador do Firewall Knock"
+
+msgid ""
+"Force all SPA packets to contain a real IP address within the encrypted "
+"data. This makes it impossible to use the -s command line argument on the "
+"fwknop client command line, so either -R has to be used to automatically "
+"resolve the external address (if the client behind a NAT) or the client must "
+"know the external IP and set it via the -a argument."
+msgstr ""
+"Forçar que todos os pacotes SPA contenham um endereço IP real dentro do "
+"pacote cifrado. Isto torna impossível o uso do argumento de linha de comando "
+"'-s' no cliente fwknop. Desta forma, ou o argumento '-R' deve ser usada para "
+"resolver os endereços externos automaticamente (se o cliente estiver atrás "
+"de uma NAT)  ou o ciente deve conhecer o seu endereço IP externo e defini-lo "
+"através do argumento '-a'."
+
+msgid ""
+"Maximum age in seconds that an SPA packet will be accepted. defaults to 120 "
+"seconds"
+msgstr ""
+"Idade máxima, em segundos, que um pacote SPA será aceito. Padrão é 120 "
+"segundos."
+
+msgid "Normal Key"
+msgstr "Chave Normal"
+
+msgid "Specify the ethernet interface on which fwknopd will sniff packets."
+msgstr ""
+"Especifica o dispositivo ethernet no qual o fwknopd irá observar os pacotes."
+
+msgid "The base64 hmac key"
+msgstr "A chave de autenticação HMAC em formato base64"
+
+msgid "Use ANY for any source ip"
+msgstr "Use \"ANY\" para qualquer endereço IP de origem"
+
+msgid ""
+"When unchecked, the config files in /etc/fwknopd will be used as is, "
+"ignoring any settings here."
+msgstr ""
+"Quando desmarcado, os arquivos de configuração em /etc/fwknopd serão usados "
+"como estão, ignorando qualquer ajustes feitos aqui."
+
+msgid "access.conf stanzas"
+msgstr "Estâncias do access.conf"
+
+msgid "fwknopd.conf config options"
+msgstr "Opções do fwknopd.conf"
index 65ef012..9e5057e 100644 (file)
@@ -3,6 +3,7 @@
 #-- Licensed to the public under the GNU General Public License v2.
 . /lib/functions/network.sh
 
+[ "$(uci -q get fwknopd.@access[0].KEY)" != "CHANGEME" ] && exit 0
 uci batch <<EOF
        add ucitrack fwknopd
        set ucitrack.@fwknopd[-1].init=fwknopd
index abca5d3..48850bd 100644 (file)
@@ -4,23 +4,23 @@ if [ "$1" != "" ]; then
 entry_num=$1
 fi
 
-key_base64=$(uci get fwknopd.@access[$entry_num].KEY_BASE64)
-key=$(uci get fwknopd.@access[$entry_num].KEY)
-hmac_key_base64=$(uci get fwknopd.@access[$entry_num].HMAC_KEY_BASE64)
-hmac_key=$(uci get fwknopd.@access[$entry_num].HMAC_KEY)
+key_base64=$(uci -q get fwknopd.@access[$entry_num].KEY_BASE64)
+key=$(uci -q get fwknopd.@access[$entry_num].KEY)
+hmac_key_base64=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY_BASE64)
+hmac_key=$(uci -q get fwknopd.@access[$entry_num].HMAC_KEY)
 
-if [ $key_base64 != "" ]; then
+if [ "$key_base64" != "" ]; then
 qr="KEY_BASE64:$key_base64"
 fi
-if [ $key != "" ]; then
+if [ "$key" != "" ]; then
 qr="$qr KEY:$key"
 
 fi
-if [ $hmac_key_base64 != "" ]; then
+if [ "$hmac_key_base64" != "" ]; then
 qr="$qr HMAC_KEY_BASE64:$hmac_key_base64"
 fi
-if [ $hmac_key != "" ]; then
+if [ "$hmac_key" != "" ]; then
 qr="$qr HMAC_KEY:$hmac_key"
 fi
 
-qrencode -o - "$qr"
+qrencode -t svg -I -o - "$qr"
index f273a55..9a981ac 100644 (file)
@@ -10,6 +10,6 @@ function index()
 
        local page
 
-       page = entry({"admin", "services", "hd_idle"}, cbi("hd_idle"), _("hd-idle"), 60)
+       page = entry({"admin", "services", "hd_idle"}, cbi("hd_idle"), _("HDD Idle"), 60)
        page.dependent = true
 end
index 70b04af..c15fdc0 100644 (file)
@@ -3,8 +3,8 @@
 
 require("nixio.fs")
 
-m = Map("hd-idle", "hd-idle",
-       translate("hd-idle is a utility program for spinning-down external " ..
+m = Map("hd-idle", translate("HDD Idle"),
+       translate("HDD Idle is a utility program for spinning-down external " ..
                "disks after a period of idle time."))
 
 s = m:section(TypedSection, "hd-idle", translate("Settings"))
@@ -18,9 +18,9 @@ for dev in nixio.fs.glob("/dev/[sh]d[a-z]") do
        disk:value(nixio.fs.basename(dev))
 end
 
-s:option(Value, "idle_time_interval", translate("Idle-time")).default = 10
+s:option(Value, "idle_time_interval", translate("Idle time")).default = 10
 s.rmempty = true
-unit = s:option(ListValue, "idle_time_unit", translate("Idle-time unit"))
+unit = s:option(ListValue, "idle_time_unit", translate("Idle time unit"))
 unit.default = "minutes"
 unit:value("minutes", translate("min"))
 unit:value("hours", translate("h"))
index 29618a8..10ca4cd 100644 (file)
@@ -21,10 +21,20 @@ msgstr "Disc"
 msgid "Enable"
 msgstr "Habilita"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle és un programa per ralentitzar els discos externs després d'un "
+"període de temps inactiu."
+
+msgid "Idle time"
 msgstr "Temps d'inactivitat"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unitat de temps d'inactivitat"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "Ajusts"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle és un programa per ralentitzar els discos externs després d'un "
-"període de temps inactiu."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index e2deb9b..b775392 100644 (file)
@@ -21,10 +21,20 @@ msgstr "Disk"
 msgid "Enable"
 msgstr "Povolit"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle je utilita pro vypnutí externích pevných disků po určité době "
+"nečinnosti."
+
+msgid "Idle time"
 msgstr "Čas nečinnosti"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Čas nečinnosti - jednotka"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "Nastavení"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle je utilita pro vypnutí externích pevných disků po určité době "
-"nečinnosti."
-
 # Minut (ne minimum)
 msgid "min"
 msgstr "min"
index fa54896..79fa603 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Festplatte"
 msgid "Enable"
 msgstr "Aktivieren"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle ist ein Hilfsprogramm um externe Festplatten nach einer "
+"festgelegten Leerlaufzeit herunter zu fahren."
+
+msgid "Idle time"
 msgstr "Leerlaufzeit"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Leerlaufzeiteinheit"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Einstellungen"
 msgid "h"
 msgstr "Stunden"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle ist ein Hilfsprogramm um externe Festplatten nach einer festgelegten "
-"Leerlaufzeit herunter zu fahren."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "Minuten"
index 4d7c23d..e4f006a 100644 (file)
@@ -19,10 +19,18 @@ msgstr "Δίσκος"
 msgid "Enable"
 msgstr "Ενεργοποίηση"
 
-msgid "Idle-time"
+msgid "HDD Idle"
 msgstr ""
 
-msgid "Idle-time unit"
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+
+msgid "Idle time"
+msgstr ""
+
+msgid "Idle time unit"
 msgstr ""
 
 msgid "Settings"
@@ -32,14 +40,6 @@ msgstr "Ρυθμίσεις"
 msgid "h"
 msgstr "ω"
 
-msgid "hd-idle"
-msgstr ""
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "λεπτά"
index 7aa4db5..3ed519f 100644 (file)
@@ -17,11 +17,21 @@ msgstr "Disk"
 msgid "Enable"
 msgstr "Enable"
 
-msgid "Idle-time"
-msgstr "Idle-time"
+msgid "HDD Idle"
+msgstr ""
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+
+msgid "Idle time"
+msgstr "Idle time"
 
-msgid "Idle-time unit"
-msgstr "Idle-time unit"
+msgid "Idle time unit"
+msgstr "Idle time unit"
 
 msgid "Settings"
 msgstr "Settings"
@@ -30,16 +40,6 @@ msgstr "Settings"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr ""
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index d2bb017..09dd3b8 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Disco"
 msgid "Enable"
 msgstr "Activar"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle es un programa que gestiona el reposo de discos externos tras un "
+"tiempo de inactividad."
+
+msgid "Idle time"
 msgstr "Tiempo de inactividad"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unidad de tiempo"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Configuración"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle es un programa que gestiona el reposo de discos externos tras un "
-"tiempo de inactividad."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "minutos"
index 00c092d..ea30bf1 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Disque"
 msgid "Enable"
 msgstr "Activer"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle est un utilitaire pour arrêter la rotation des disques externes "
+"après une période d'inactivité."
+
+msgid "Idle time"
 msgstr "Temps d'inactivité"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unité de temps"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Réglages"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle est un utilitaire pour arrêter la rotation des disques externes "
-"après une période d'inactivité."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index 0ffde90..8a73d5f 100644 (file)
@@ -21,10 +21,20 @@ msgstr "כונן"
 msgid "Enable"
 msgstr "אפשר"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr ""
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle הינה תוכנת שירות שמטרתה להקטין את מהירות הסיבוב של כוננים חיצוניים "
+"לאחר זמן מסוים של חוסר פעילות."
+
+msgid "Idle time"
 msgstr "זמן חוסר פעילות"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "יחידת זמן חוסר פעילות"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "הגדרות"
 msgid "h"
 msgstr "ש'"
 
-msgid "hd-idle"
-msgstr ""
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle הינה תוכנת שירות שמטרתה להקטין את מהירות הסיבוב של כוננים חיצוניים "
-"לאחר זמן מסוים של חוסר פעילות."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "דק'"
index 543a8fc..d902ee0 100644 (file)
@@ -21,10 +21,20 @@ msgstr "Lemez"
 msgid "Enable"
 msgstr "Engedélyezés"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle egy a külső lemezek adott üresjárati idő után történő leállítására "
+"szolgáló segédprogram."
+
+msgid "Idle time"
 msgstr "Üresjárati idő"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Üresjárati idő egysége"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "Beállítások"
 msgid "h"
 msgstr "óra"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle egy a külső lemezek adott üresjárati idő után történő leállítására "
-"szolgáló segédprogram."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "perc"
index ffd118d..63751c3 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Disco"
 msgid "Enable"
 msgstr "Abilita"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle è un programma per mettere in standby i dischi esterni dopo un "
+"periodo di inattività."
+
+msgid "Idle time"
 msgstr "Tempo di inattività"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unità di misura del tempo di inattività"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Opzioni"
 msgid "h"
 msgstr "ora/e"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"HD-idle è un programma per mettere in standby i dischi esterni dopo un "
-"periodo di inattività."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index 9e724eb..6023778 100644 (file)
@@ -19,10 +19,20 @@ msgstr "ディスク"
 msgid "Enable"
 msgstr "有効"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idleはアイドル時に外部ディスクをスピンダウンさせるための、ユーティリティ"
+"プログラムです。"
+
+msgid "Idle time"
 msgstr "アイドル時間"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "アイドル時間 (単位)"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "設定"
 msgid "h"
 msgstr "時"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idleはアイドル時に外部ディスクをスピンダウンさせるための、ユーティリティプ"
-"ログラムです。"
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "分"
index 45402b8..361f1ac 100644 (file)
@@ -18,25 +18,25 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
-msgid "Idle-time"
+msgid "HDD Idle"
 msgstr ""
 
-msgid "Idle-time unit"
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
 msgstr ""
 
-msgid "Settings"
+msgid "Idle time"
 msgstr ""
 
-# Hours
-msgid "h"
+msgid "Idle time unit"
 msgstr ""
 
-msgid "hd-idle"
+msgid "Settings"
 msgstr ""
 
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
+# Hours
+msgid "h"
 msgstr ""
 
 # Minutes (not minimum)
index dc0c2f8..6482a29 100644 (file)
@@ -10,10 +10,20 @@ msgstr "Disk"
 msgid "Enable"
 msgstr "Aktiver"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle er et verktøy for å spinne ned eksterne disker etter en periode med "
+"inaktivitet."
+
+msgid "Idle time"
 msgstr "Tid inaktiv"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Tidsenhet"
 
 msgid "Settings"
@@ -22,16 +32,6 @@ msgstr "Innstillinger"
 msgid "h"
 msgstr "timer"
 
-msgid "hd-idle"
-msgstr "Hd-Idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle er et verktøy for å spinne ned eksterne disker etter en periode med "
-"inaktivitet."
-
 msgid "min"
 msgstr "minutter"
 
index c6522c1..29c286f 100644 (file)
@@ -20,10 +20,20 @@ msgstr "Dysk"
 msgid "Enable"
 msgstr "Włącz"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle jest narzędziem do zwalniania obrotów zewnętrznych dysków po "
+"określonym czasie bezczynności."
+
+msgid "Idle time"
 msgstr "Czas bezczynności"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Jednostka czasu bezczynności"
 
 msgid "Settings"
@@ -33,16 +43,6 @@ msgstr "Ustawienia"
 msgid "h"
 msgstr "godz."
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle jest narzędziem do zwalniania obrotów zewnętrznych dysków po "
-"określonym czasie bezczynności."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index 0aaca93..adcf063 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Disco"
 msgid "Enable"
 msgstr "Habilitar"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle é um programa utilitário para ativar o modo \"economia de energia"
+"\" (spinning-down) de discos externos após um período de ociosidade."
+
+msgid "Idle time"
 msgstr "Tempo de ociosidade"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unidade do tempo da ociosidade"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Configurações"
 msgid "h"
 msgstr "horas"
 
-msgid "hd-idle"
-msgstr "Hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"Hd-idle é um programa utilitário para ativar o modo \"economia de energia"
-"\" (spinning-down) de discos externos após um período de ociosidade."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "minutos"
index 16cb085..81a6ae2 100644 (file)
@@ -19,10 +19,20 @@ msgstr "Disco"
 msgid "Enable"
 msgstr "Ativar"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle é um programa utilitário para activar o modo \"economia de energia"
+"\" (spinning-down) de discos externos após um período de ociosidade."
+
+msgid "Idle time"
 msgstr "Tempo de ociosidade"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unidade de tempo de ociosidade"
 
 msgid "Settings"
@@ -32,16 +42,6 @@ msgstr "Configurações"
 msgid "h"
 msgstr "h"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle é um programa utilitário para activar o modo \"economia de energia"
-"\" (spinning-down) de discos externos após um período de ociosidade."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "min"
index ae6a8b0..31311ce 100644 (file)
@@ -22,10 +22,20 @@ msgstr "Disc"
 msgid "Enable"
 msgstr "Activeaza"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle este un utilitar pentru a oprit din rotatie hard disc-urile externe "
+"dupa o anumita perioada de inactivitate."
+
+msgid "Idle time"
 msgstr "Timp de inactivitate"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Unitatea de timp pentru masurarea inactivitatii"
 
 msgid "Settings"
@@ -35,16 +45,6 @@ msgstr "Setari"
 msgid "h"
 msgstr "ore"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle este un utilitar pentru a oprit din rotatie hard disc-urile externe "
-"dupa o anumita perioada de inactivitate."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "minute"
index 45d4a51..e58a32f 100644 (file)
@@ -21,10 +21,20 @@ msgstr "Диск"
 msgid "Enable"
 msgstr "Включить"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"Утилита HDD Idle позволяет замедлять внешние диски после определённого "
+"времени бездействия."
+
+msgid "Idle time"
 msgstr "Время бездействия"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Единицы времени бездействия"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "Настройки"
 msgid "h"
 msgstr "ч"
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"Утилита hd-idle позволяет замедлять внешние диски после определённого "
-"времени бездействия."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "мин"
index 0ae82d8..aa82e96 100644 (file)
@@ -14,24 +14,24 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
-msgid "Idle-time"
+msgid "HDD Idle"
 msgstr ""
 
-msgid "Idle-time unit"
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
 msgstr ""
 
-msgid "Settings"
+msgid "Idle time"
 msgstr ""
 
-msgid "h"
+msgid "Idle time unit"
 msgstr ""
 
-msgid "hd-idle"
+msgid "Settings"
 msgstr ""
 
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
+msgid "h"
 msgstr ""
 
 msgid "min"
index 1d63095..f2ce8f1 100644 (file)
@@ -15,24 +15,24 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
-msgid "Idle-time"
+msgid "HDD Idle"
 msgstr ""
 
-msgid "Idle-time unit"
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
 msgstr ""
 
-msgid "Settings"
+msgid "Idle time"
 msgstr ""
 
-msgid "h"
+msgid "Idle time unit"
 msgstr ""
 
-msgid "hd-idle"
+msgid "Settings"
 msgstr ""
 
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
+msgid "h"
 msgstr ""
 
 msgid "min"
index 56079ed..b8aedcd 100644 (file)
@@ -7,24 +7,24 @@ msgstr ""
 msgid "Enable"
 msgstr ""
 
-msgid "Idle-time"
+msgid "HDD Idle"
 msgstr ""
 
-msgid "Idle-time unit"
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
 msgstr ""
 
-msgid "Settings"
+msgid "Idle time"
 msgstr ""
 
-msgid "h"
+msgid "Idle time unit"
 msgstr ""
 
-msgid "hd-idle"
+msgid "Settings"
 msgstr ""
 
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
+msgid "h"
 msgstr ""
 
 msgid "min"
index f9ace87..aed11b6 100644 (file)
@@ -21,10 +21,20 @@ msgstr "Disk"
 msgid "Enable"
 msgstr "Kullanıma Aç"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "Harddisk-Park"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"Harddisk-Park belirli bir zaman sonra diskleri beklemeye alan bir yardımcı "
+"programdır"
+
+msgid "Idle time"
 msgstr "Bekleme Zamanı"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "bekleme zamanı birimi"
 
 msgid "Settings"
@@ -34,16 +44,6 @@ msgstr "Ayarlar"
 msgid "h"
 msgstr "s"
 
-msgid "hd-idle"
-msgstr "Harddisk-Park"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"Harddisk-Park belirli bir zaman sonra diskleri beklemeye alan bir yardımcı "
-"programdır"
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "d"
index 129fd7b..3d8e45c 100644 (file)
@@ -22,10 +22,19 @@ msgstr "Диск"
 msgid "Enable"
 msgstr "Активувати"
 
-msgid "Idle-time"
+#, fuzzy
+msgid "HDD Idle"
+msgstr "HD-простій"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+
+msgid "Idle time"
 msgstr "Час простою"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr ""
 
 msgid "Settings"
@@ -35,15 +44,6 @@ msgstr "Налаштування"
 msgid "h"
 msgstr ""
 
-#, fuzzy
-msgid "hd-idle"
-msgstr "HD-простій"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "хв"
index 03ee2c1..a5d4ffe 100644 (file)
@@ -20,12 +20,22 @@ msgstr "Ổ đĩa"
 msgid "Enable"
 msgstr "Kích hoạt debug"
 
+msgid "HDD Idle"
+msgstr "HDD Idle"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr ""
+"HDD Idle là một chương trình tiện ích để quay các đĩa ngoài sau một khoảng "
+"thời gian idle."
+
 #, fuzzy
-msgid "Idle-time"
+msgid "Idle time"
 msgstr "Thời gian Idle"
 
 #, fuzzy
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "Đơn vị thời gian Idle"
 
 msgid "Settings"
@@ -35,16 +45,6 @@ msgstr "Sắp đặt"
 msgid "h"
 msgstr ""
 
-msgid "hd-idle"
-msgstr "hd-idle"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr ""
-"hd-idle là một chương trình tiện ích để quay các đĩa ngoài sau một khoảng "
-"thời gian idle."
-
 # Minutes (not minimum)
 msgid "min"
 msgstr ""
index 8bc14dc..d67abfd 100644 (file)
@@ -19,10 +19,18 @@ msgstr "硬盘"
 msgid "Enable"
 msgstr "开启"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "硬盘休眠"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr "硬盘休眠是一个让硬盘在空闲一段时间后休眠的工具"
+
+msgid "Idle time"
 msgstr "空闲时间"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "空闲时间单位"
 
 msgid "Settings"
@@ -32,14 +40,6 @@ msgstr "设置"
 msgid "h"
 msgstr "小时"
 
-msgid "hd-idle"
-msgstr "硬盘休眠"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr "硬盘休眠是一个让硬盘在空闲一段时间后休眠的工具"
-
 # Minutes (not minimum)
 msgid "min"
 msgstr "分钟"
index bd69785..dee14cb 100644 (file)
@@ -17,10 +17,18 @@ msgstr "磁碟"
 msgid "Enable"
 msgstr "啟用"
 
-msgid "Idle-time"
+msgid "HDD Idle"
+msgstr "硬碟休眠"
+
+msgid ""
+"HDD Idle is a utility program for spinning-down external disks after a "
+"period of idle time."
+msgstr "硬碟休眠是控制當硬碟閒置一段時間後進入休眠模式的工具"
+
+msgid "Idle time"
 msgstr "休眠時間"
 
-msgid "Idle-time unit"
+msgid "Idle time unit"
 msgstr "休眠時間單位"
 
 msgid "Settings"
@@ -29,14 +37,6 @@ msgstr "設定"
 msgid "h"
 msgstr "小時"
 
-msgid "hd-idle"
-msgstr "硬碟休眠"
-
-msgid ""
-"hd-idle is a utility program for spinning-down external disks after a period "
-"of idle time."
-msgstr "硬碟休眠是控制當硬碟閒置一段時間後進入休眠模式的工具"
-
 msgid "min"
 msgstr "分鐘"
 
diff --git a/applications/luci-app-lxc/Makefile b/applications/luci-app-lxc/Makefile
new file mode 100644 (file)
index 0000000..9f313df
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LXC management Web UI
+LUCI_DEPENDS:=+luci-mod-admin-full +lxc +lxc-create +liblxc +rpcd-mod-lxc +getopt +xz
+LUCI_PKGARCH:=all
+
+PKG_MAINTAINER:=Petar Koretic <petar.koretic@sartura.hr>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif
new file mode 100644 (file)
index 0000000..d09febf
Binary files /dev/null and b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/green.gif differ
diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif
new file mode 100644 (file)
index 0000000..f0d68cc
Binary files /dev/null and b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/purple.gif differ
diff --git a/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif
new file mode 100644 (file)
index 0000000..c1b39bb
Binary files /dev/null and b/applications/luci-app-lxc/htdocs/luci-static/resources/cbi/red.gif differ
diff --git a/applications/luci-app-lxc/luasrc/controller/lxc.lua b/applications/luci-app-lxc/luasrc/controller/lxc.lua
new file mode 100644 (file)
index 0000000..ea7adba
--- /dev/null
@@ -0,0 +1,167 @@
+--[[
+
+LuCI LXC module
+
+Copyright (C) 2014, Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Petar Koretic <petar.koretic@sartura.hr>
+
+]]--
+
+module("luci.controller.lxc", package.seeall)
+
+require "ubus"
+local conn = ubus.connect()
+if not conn then
+    error("Failed to connect to ubus")
+end
+
+
+function fork_exec(command)
+       local pid = nixio.fork()
+       if pid > 0 then
+               return
+       elseif pid == 0 then
+               -- change to root dir
+               nixio.chdir("/")
+
+               -- patch stdin, out, err to /dev/null
+               local null = nixio.open("/dev/null", "w+")
+               if null then
+                       nixio.dup(null, nixio.stderr)
+                       nixio.dup(null, nixio.stdout)
+                       nixio.dup(null, nixio.stdin)
+                       if null:fileno() > 2 then
+                               null:close()
+                       end
+               end
+
+               -- replace with target command
+               nixio.exec("/bin/sh", "-c", command)
+       end
+end
+
+function index()
+       page = node("admin", "services", "lxc")
+       page.target = cbi("lxc")
+       page.title = _("LXC Containers")
+       page.order = 70
+
+       page = entry({"admin", "services", "lxc_create"}, call("lxc_create"), nil)
+       page.leaf = true
+
+       page = entry({"admin", "services", "lxc_action"}, call("lxc_action"), nil)
+       page.leaf = true
+
+       page = entry({"admin", "services", "lxc_get_downloadable"}, call("lxc_get_downloadable"), nil)
+       page.leaf = true
+
+       page = entry({"admin", "services", "lxc_configuration_get"}, call("lxc_configuration_get"), nil)
+       page.leaf = true
+
+       page = entry({"admin", "services", "lxc_configuration_set"}, call("lxc_configuration_set"), nil)
+       page.leaf = true
+
+end
+
+function lxc_get_downloadable()
+       luci.http.prepare_content("application/json")
+
+       local f = io.popen('uname -m', 'r')
+       local target = f:read('*a')
+       f:close()
+       target = target:gsub("^%s*(.-)%s*$", "%1")
+
+       local templates = {}
+
+       local f = io.popen('lxc-create -n just_want_to_list_available_lxc_templates -t download -- --list', 'r')
+
+       for line in f:lines() do
+               local dist,version = line:match("^(%S+)%s+(%S+)%s+" .. target .. "%s+default%s+%S+$")
+               if dist~=nil and version~=nil then templates[#templates + 1] = dist .. ":" .. version end
+       end
+
+       f:close()
+       luci.http.write_json(templates)
+end
+
+function lxc_create(lxc_name, lxc_template)
+       luci.http.prepare_content("text/plain")
+
+       local uci = require("uci").cursor()
+
+       local url = uci:get("lxc", "lxc", "url")
+
+       if not pcall(dofile, "/etc/openwrt_release") then
+               return luci.http.write("1")
+       end
+
+       local f = io.popen('uname -m', 'r')
+       local target = f:read('*a')
+       f:close()
+       target = target:gsub("^%s*(.-)%s*$", "%1")
+
+       local lxc_dist = lxc_template:gsub("(.*):(.*)", '%1')
+       local lxc_release = lxc_template:gsub("(.*):(.*)", '%2')
+
+       local data = conn:call("lxc", "create", { name = lxc_name, template = "download", args = { "--server", url,  "--no-validate", "--dist", lxc_dist, "--release", lxc_release, "--arch", target } } )
+
+       luci.http.write(data)
+end
+
+function lxc_action(lxc_action, lxc_name)
+       luci.http.prepare_content("application/json")
+
+       local data, ec = conn:call("lxc", lxc_action, lxc_name and { name = lxc_name} or {} )
+
+       luci.http.write_json(ec and {} or data)
+end
+
+function lxc_get_config_path()
+       local f = io.open("/etc/lxc/lxc.conf", "r")
+       local content = f:read("*all")
+       f:close()
+       local ret = content:match('^%s*lxc.lxcpath%s*=%s*([^%s]*)')
+       if ret then
+               return ret .. "/"
+       else
+               return "/srv/lxc/"
+       end
+end
+
+function lxc_configuration_get(lxc_name)
+       luci.http.prepare_content("text/plain")
+
+       local f = io.open(lxc_get_config_path() .. lxc_name .. "/config", "r")
+       local content = f:read("*all")
+       f:close()
+
+       luci.http.write(content)
+end
+
+function lxc_configuration_set(lxc_name)
+       luci.http.prepare_content("text/plain")
+
+       local lxc_configuration = luci.http.formvalue("lxc_configuration")
+
+       if lxc_configuration == nil then
+               return luci.http.write("1")
+       end
+
+       local f, err = io.open(lxc_get_config_path() .. lxc_name .. "/config","w+")
+       if not f then
+               return luci.http.write("2")
+       end
+
+       f:write(lxc_configuration)
+       f:close()
+
+       luci.http.write("0")
+end
+
diff --git a/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua b/applications/luci-app-lxc/luasrc/model/cbi/lxc.lua
new file mode 100644 (file)
index 0000000..ac0fdff
--- /dev/null
@@ -0,0 +1,31 @@
+--[[
+
+LuCI LXC module
+
+Copyright (C) 2014, Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Petar Koretic <petar.koretic@sartura.hr>
+
+]]--
+
+local fs = require "nixio.fs"
+
+m = Map("lxc", translate("LXC Containers"))
+
+if fs.access("/etc/config/lxc") then
+       m:section(SimpleSection).template = "lxc"
+
+       s = m:section(TypedSection, "lxc", translate("Options"))
+       s.anonymous = true
+       s.addremove = false
+
+       s:option(Value, "url", translate("Containers URL"))
+end
+
+return m
diff --git a/applications/luci-app-lxc/luasrc/view/lxc.htm b/applications/luci-app-lxc/luasrc/view/lxc.htm
new file mode 100644 (file)
index 0000000..edfff8e
--- /dev/null
@@ -0,0 +1,458 @@
+<%#
+
+LuCI LXC module
+
+Copyright (C) 2014, Cisco Systems, Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Petar Koretic <petar.koretic@sartura.hr>
+
+-%>
+
+<fieldset class="cbi-section">
+       <legend><%:Available Containers%></legend>
+       <div class="cbi-section-node">
+               <table id="t_lxc_list" class="cbi-section-table">
+                       <tr class="cbi-section-table-titles">
+                               <th class="cbi-section-table-cell"><%:Name%></th>
+                               <th class="cbi-section-table-cell"><%:Status%></th>
+                               <th class="cbi-section-table-cell"><%:Actions%></th>
+                       </tr>
+               </table>
+       </div>
+</fieldset>
+
+<fieldset class="cbi-section">
+       <span id="lxc-list-output"></span>
+</fieldset>
+
+<hr/>
+<fieldset class="cbi-section">
+       <legend><%:Create New Container%></legend>
+       <div class="cbi-section-node">
+               <table id="t_lxc_create" class="cbi-section-table">
+                       <tr class="cbi-section-table-titles">
+                               <th class="cbi-section-table-cell"><%:Name%></th>
+                               <th class="cbi-section-table-cell"><%:Template%></th>
+                               <th class="cbi-section-table-cell"><%:Actions%></th>
+                       </tr>
+                       <tr id="tr_holder">
+                               <td>
+                                       <input type="text" id="tx_name" placeholder="<%:Enter new name%>" value='' />
+                               </td>
+                               <td>
+                                       <select id="s_template" class="cbi-input-select cbi-button">
+                                       </select>
+                               </td>
+                               <td>
+                                       <input type="button" id="bt_create" value="<%:Create%>" onclick="lxc_create(tr_holder)" class="cbi-button cbi-button-add" />
+                                       <span id="lxc-add-loader" style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>
+                               </td>
+                       </tr>
+               </table>
+       </div>
+</fieldset>
+
+<fieldset class="cbi-section">
+       <span id="lxc-add-output"></span>
+</fieldset>
+
+<hr/>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+       window.img = { "red" : "<%=resource%>/cbi/red.gif", "green" : "<%=resource%>/cbi/green.gif", "purple" : "<%=resource%>/cbi/purple.gif" }
+       window.states = {  "STOPPED" : "red", "RUNNING" : "green", "FROZEN" : "purple"}
+
+       var t_lxc_list = document.getElementById('t_lxc_list');
+       var loader_html = '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" width="16" height="16" style="vertical-align:middle" /> ';
+       var timeout_msg = 0
+       var output_list = document.getElementById("lxc-list-output")
+       var output_add = document.getElementById("lxc-add-output")
+       var loader_add = document.getElementById("lxc-add-loader")
+
+       function lxc_create(tr)
+       {
+               var lxc_name = tr.querySelector("#tx_name").value.trim()
+               var lxc_template = tr.querySelector("#s_template").value
+               var bt_create = tr.querySelector("#bt_create")
+
+               if (t_lxc_list.querySelector("[data-id='" + lxc_name + "']") != null)
+                       return info_message(output_add, "Container with that name already exists!", 4000)
+
+               bt_create.disabled = true
+               output_add.innerHTML = ''
+
+               if (!lxc_name || !lxc_name.length)
+               {
+                       bt_create.disabled = false
+                       return info_message(output_add, "Name cannot be empty!", 4000)
+               }
+
+               loading(loader_add)
+
+               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_create/' + '%h/%h'.format(lxc_name, lxc_template) , null,
+               function(x)
+               {
+                       bt_create.disabled = false
+                       loading(loader_add, 0)
+
+                       if (!x)
+                               info_message(output_add, "Container creation failed!")
+               })
+       }
+
+       function lxc_create_template(lxc_name, lxc_state)
+       {
+               var info_row = t_lxc_list.querySelector("#empty")
+               if (info_row)
+                       t_lxc_list.deleteRow(1)
+
+               var actions = ''
+               actions += '<input type="button" onclick="action_handler(this)" data-action="start" value="<%:Start%>" class="cbi-button cbi-button-apply" />'
+               actions+= '<input type="button" onclick="action_handler(this)" data-action="stop" value="<%:Stop%>" class="cbi-button cbi-button-reset" />'
+               actions+= '<input type="button" onclick="action_handler(this)" data-action="destroy" value="<%:Delete%>" class="cbi-button cbi-button-remove" />'
+               actions+= ' <select class="cbi-input-select cbi-button" onchange="action_more_handler(this)">\
+                                               <option selected disabled>more</option>\
+                                               <option>configure</option>\
+                                               <option>freeze</option>\
+                                               <option>unfreeze</option>\
+                                               <option>reboot</option>\
+                                       </select>'
+               actions+= '<span data-loader style="display:inline-block; width:16px; height:16px; margin:0 5px"></span>'
+
+               var row = t_lxc_list.insertRow(-1)
+               var cell = row.insertCell(-1)
+               cell.innerHTML = '%q%h%q'.format("<strong>", lxc_name, "</strong>")
+               cell.width = "30%"
+               cell.setAttribute("data-id", lxc_name)
+
+               cell = row.insertCell(-1)
+               cell.width = "20%"
+               cell.innerHTML = "<img src='"+window.img[lxc_state]+"'/>"
+
+               cell = row.insertCell(-1)
+               cell.width = "50%"
+               cell.innerHTML = actions
+       }
+
+       function action_handler(self)
+       {
+               var action = self.getAttribute("data-action");
+
+               var bt_action = self
+               var lxc_name = self.parentNode.parentNode.children[0].getAttribute('data-id')
+               var status_img = self.parentNode.parentNode.querySelector('img')
+               var loader = self.parentNode.querySelector('[data-loader]')
+
+               bt_action.disabled = true
+
+               if (action == "stop")
+               {
+                       loading(loader)
+
+                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
+                       function(x, ec)
+                       {
+                               loading(loader, 0)
+                               bt_action.disabled = false
+
+                               if (!x || ec)
+                                       return info_message(output_list,"Action failed!")
+
+                               set_status(status_img, "red")
+
+                       });
+               }
+
+               else if (action == "start")
+               {
+                       loading(loader)
+
+                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
+                       function(x, data)
+                       {
+                               loading(loader, 0)
+                               bt_action.disabled = false
+
+                               //FIXME: uncomment after fixing 'lxc-start'
+                               if (!x /*|| ec */)
+                                       return info_message(output_list,"Action failed!")
+
+                               //FIXME: uncomment after fixing 'lxc-start'
+                               //set_status(status_img, "green")
+                       });
+               }
+
+               else if (action == "destroy")
+               {
+                       if (!confirm("This will completely remove LXC container from the disk. Are you sure? (container will be stopped if running)"))
+                               return
+
+                       loading(loader)
+
+                       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(action, lxc_name), null,
+                       function(x, ec)
+                       {
+                               loading(loader, 0)
+                               bt_action.disabled = false
+
+                               if (!x || ec)
+                                       return info_message(output_list,"Action failed!")
+
+                               var row = self.parentNode.parentNode
+                               row.parentNode.removeChild(row)
+
+                       });
+               }
+       }
+
+       function lxc_configure_handler(self)
+       {
+               var td = self.parentNode
+               var textarea = td.querySelector('[data-id]')
+               var lxc_name = textarea.getAttribute('data-id')
+               var lxc_configuration = textarea.value
+
+               new XHR().post('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_set/' + lxc_name, "lxc_configuration=" + encodeURIComponent(lxc_configuration) ,
+               function(x)
+               {
+                       if (!x || x.responseText != "0")
+                               return info_message(output_list,"Action failed!")
+
+                       info_message(output_list,"LXC configuration updated")
+                       var row = td.parentNode
+                       row.parentNode.removeChild(row)
+               })
+       }
+
+       function lxc_rename_template(lxc_name)
+       {
+               var h = '\
+                       <input data-id="'+ lxc_name + '" type="text" placeholder="Enter new name" /> \
+                       <input data-id="bt_confirm" onclick="lxc_rename_handler(this)" type="button" class="cbi-button" value="Confirm" />'
+
+               return h
+       }
+
+       function lxc_configure_template(lxc_name, lxc_configuration)
+       {
+               var h = '\
+                       <textarea data-id="'+ lxc_name + '" rows="20" style="width:100%">'+ lxc_configuration +'</textarea> \
+                       <input data-id="bt_confirm" onclick="lxc_configure_handler(this)" type="button" class="cbi-button" value="Confirm" />'
+
+               return h
+       }
+
+       function action_more_handler(self)
+       {
+               var lxc_name = self.parentNode.parentNode.querySelector('[data-id]').getAttribute('data-id')
+               var loader = self.parentNode.parentNode.querySelector('[data-loader]')
+
+               var option = self.options[self.selectedIndex].text
+
+               self.value = "more"
+
+               switch (option)
+               {
+                       case "configure":
+                               var tr = document.createElement('tr')
+                               var row = self.parentNode.parentNode
+                               var next_row = row.nextSibling
+                               if (next_row && next_row.getAttribute('data-action') !== null)
+                                       row.parentNode.removeChild(next_row)
+
+                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_configuration_get/' + lxc_name, null,
+                               function(x)
+                               {
+                                       tr.innerHTML="<td colspan='" + row.cells.length + "'>" + lxc_configure_template(lxc_name, x.responseText) + "</td>"
+                                       tr.setAttribute('data-action','')
+                                       row.parentNode.insertBefore(tr, row.nextSibling)
+                               })
+
+                       break
+
+                       case "freeze":
+                               var tr = self.parentNode.parentNode
+                               var img = tr.querySelector('img')
+                               if(img.getAttribute('src') != window.img["green"])
+                                       return info_message(output_list,"Container is not running!")
+
+                               loading(loader)
+                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
+                               function(x, ec)
+                               {
+                                       loading(loader, 0)
+                                       if (!x || ec)
+                                               return info_message(output_list,"Action failed!")
+
+                                       set_status(img, "purple")
+                               })
+
+                       break
+
+                       case "unfreeze":
+                               var tr = self.parentNode.parentNode
+                               var img = tr.querySelector('img')
+
+                               if(img.getAttribute('src') != window.img["purple"])
+                                       return info_message(output_list,"Container is not frozen!")
+
+                               loading(loader)
+                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
+                               function(x, ec)
+                               {
+                                       loading(loader, 0)
+                                       if (!x || ec)
+                                               return info_message(output_list,"Action failed!")
+
+                                       set_status(img, "green")
+                               })
+
+                       break
+
+                       case "reboot":
+                               var tr = self.parentNode.parentNode
+                               var img = tr.querySelector('img')
+                               if(img.getAttribute('src') != window.img["green"])
+                                       return info_message(output_list,"Container is not running!")
+
+                               if (!confirm("Are you sure?"))
+                                       return
+
+                               loading(loader)
+                               new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/' + '%h/%h'.format(option, lxc_name), null,
+                               function(x, ec)
+                               {
+                                       loading(loader, 0)
+                                       if (!x || ec)
+                                               return info_message(output_list,"Action failed!")
+
+                                       info_message(output_list,"LXC rebooted")
+                               })
+                       break
+               }
+
+       }
+
+       function set_empty(t_lxc_list)
+       {
+               if (document.getElementById('empty') !== null)
+                       return
+
+               var row_count = t_lxc_list.rows.length;
+               while(--row_count) t_lxc_list.deleteRow(row_count);
+
+               var row = t_lxc_list.insertRow(-1);
+               row.id = 'empty'
+               var cell = row.insertCell(0);
+               cell.colSpan = 4;
+               cell.innerHTML = '<em><br />There are no containers available yet.</em>';
+       }
+
+       function lxc_list_update()
+       {
+               XHR.poll(4, '<%=luci.dispatcher.build_url("admin", "services")%>/lxc_action/list', null,
+               function(x, data)
+               {
+                       if (!x) return;
+
+                       var lxc_count = Object.keys(data).length
+                       if (!data || !lxc_count)
+                               return set_empty(t_lxc_list)
+
+                       if (document.getElementById('empty') !== null)
+                               t_lxc_list.deleteRow(1);
+
+                       var lxcs = t_lxc_list.querySelectorAll('td[data-id]')
+                       var lxc_name_table = {}
+                       for (var i = 0, len = lxcs.length; i < len; i++)
+                       {
+                               var lxc_name = lxcs[i].getAttribute('data-id')
+                               if (!(lxc_name in data))
+                               {
+                                       var row = t_lxc_list.querySelector("[data-id='" + lxc_name + "']").parentNode
+                                       row.parentNode.removeChild(row)
+                                       continue
+                               }
+
+                               lxc_name_table[lxc_name] = lxcs[i].parentNode.querySelector('img')
+                       }
+
+                       for(var key in data)
+                       {
+                               var lxc_name = key
+                               var state = window.states[data[key]]
+
+                               if (!(lxc_name in lxc_name_table))
+                                       lxc_create_template(lxc_name, state)
+
+                               else if (state != get_status(lxc_name_table[lxc_name]))
+                                       set_status(lxc_name_table[lxc_name], state)
+                       }
+
+               })
+       }
+
+       function loading(elem, state)
+       {
+               state = (typeof state === 'undefined') ? 1 : state
+
+               if (state === 1)
+                       elem.innerHTML = loader_html
+               else
+                       setTimeout(function() { elem.innerHTML = ''}, 1000)
+       }
+
+       function set_status(elem, state)
+       {
+               state = (typeof state === 'undefined') ? 1 : state
+
+               setTimeout(function() { elem.setAttribute('src', window.img[state])}, 300)
+       }
+
+       function get_status(elem)
+       {
+               var src = elem.getAttribute('src')
+
+               for (var i in img)
+               {
+                       if (img[i] == src)
+                               return i
+               }
+       }
+
+       function info_message(output, msg, timeout)
+       {
+               timeout = timeout || 3000
+               output.innerHTML = msg
+               clearTimeout(timeout_msg)
+               timeout_msg = setTimeout(function(){ output.innerHTML=""}, timeout);
+       }
+
+       lxc_list_update()
+
+       new XHR().get('<%=luci.dispatcher.build_url("admin", "services")%>/lxc_get_downloadable', null,
+       function(x, data)
+       {
+               if (!x) return;
+
+               var lxc_count = Object.keys(data).length
+               if (!data || !lxc_count) return;
+               var select = document.getElementById("s_template");
+               for(var key in data)
+               {
+                       var option = document.createElement('option');
+                       option.value = data[key];
+                       option.text = data[key].replace(/[_:]/g, ' ');
+                       select.add(option, -1);
+               }
+       })
+
+//]]></script>
diff --git a/applications/luci-app-lxc/root/etc/config/lxc b/applications/luci-app-lxc/root/etc/config/lxc
new file mode 100644 (file)
index 0000000..5572c73
--- /dev/null
@@ -0,0 +1,6 @@
+#
+# lxc uci configuration
+#
+
+config lxc 'lxc'
+       option url 'virtualwrt.org/containers/'
index 68f7a5a..62ce25e 100644 (file)
@@ -103,10 +103,7 @@ uci:foreach("wireless", "wifi-device", function(section)
 
        -- Channel selection
 
-       if hwtype == "atheros" then
-               local cc = util.trim(sys.exec("grep -i '" .. syscc .. "' /lib/wifi/cc_translate.txt |cut -d ' ' -f 2")) or 0
-               sys.exec('"echo " .. cc .. " > /proc/sys/dev/" .. device .. "/countrycode"')
-       elseif hwtype == "mac80211" then
+       if hwtype == "mac80211" then
                sys.exec("iw reg set " .. syscc)
        elseif hwtype == "broadcom" then
                sys.exec ("wlc country " .. syscc)
index a2238e5..9421e02 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2011-10-11 00:23+0200\n"
-"PO-Revision-Date: 2014-03-17 10:01+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-20 18:00-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
 
 msgid "Activate or deactivate IPv6 config globally."
 msgstr "Habilita e desabilita a configuração IPv6 globalmente."
@@ -70,7 +70,6 @@ msgstr "Endereço IPv6 da rede em malha"
 msgid "Mesh Wizard"
 msgstr "Assistente de Configuração da Rede em Malha"
 
-#, fuzzy
 msgid ""
 "Note: this will set up this interface for mesh operation, i.e. add it to "
 "zone 'freifunk' and enable olsr."
index d5d0707..b04c880 100644 (file)
@@ -20,7 +20,7 @@ msgid "Channel"
 msgstr "频道"
 
 msgid "Check this to protect your LAN from other nodes or clients"
-msgstr "选择此项,隔离其他节点或客户端的攻击来保护的局域网"
+msgstr "选择此项,隔离其他节点或客户端的攻击来保护的局域网"
 
 msgid "Cleanup config"
 msgstr "清空配置"
@@ -76,14 +76,14 @@ msgstr "保护LAN口"
 
 msgid ""
 "Select this to allow others to use your connection to access the internet."
-msgstr "选择这项来允许其它程序用这个连接来接入因特网"
+msgstr "选择这项来允许其它程序用这个连接来接入因特网"
 
 #, fuzzy
 msgid "Send router advertisements on this device."
 msgstr "在这个设备上发送路由广播"
 
 msgid "Share your internet connection"
-msgstr "分享的Internet连接"
+msgstr "分享的Internet连接"
 
 msgid ""
 "The IP range from which clients are assigned ip addresses (e.g. "
index 99ef68c..067d08c 100644 (file)
@@ -91,6 +91,10 @@ s:taboption("advanced", Flag, "enable_tivo", translate("Enable TIVO:"),
        translate("Set this to enable support for streaming .jpg and .mp3 files to a TiVo supporting HMO."))
 o.rmempty = true
 
+s:taboption("advanced", Flag, "wide_links", translate("Allow wide links:"),
+       translate("Set this to allow serving content outside the media root (via symlinks)."))
+o.rmempty = true
+
 o = s:taboption("advanced", Flag, "strict_dlna", translate("Strict to DLNA standard:"),
        translate("Set this to strictly adhere to DLNA standards. This will allow server-side downscaling of very large JPEG images, which may hurt JPEG serving performance on (at least) Sony DLNA products."))
 o.rmempty = true
@@ -126,7 +130,7 @@ o:value("P", translate("Pictures"))
 
 
 s:taboption("general", DynamicList, "media_dir", translate("Media directories:"),
-       translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."))
+       translate("Set this to the directory you want scanned. If you want to restrict the directory to a specific content type, you can prepend the type ('A' for audio, 'V' for video, 'P' for images), followed by a comma, to the directory (eg. A,/mnt/media/Music). Multiple directories can be specified."))
 
 
 o = s:taboption("general", DynamicList, "album_art_names", translate("Album art names:"),
index bf16008..dadcf04 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Ajusts avançats"
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -113,6 +116,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -131,7 +138,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index bf5a7f4..f4cbd76 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Pokročilé nastavení"
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -115,6 +118,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -133,7 +140,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 22cb0f7..d001696 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Erweiterte Einstellungen"
 msgid "Album art names:"
 msgstr "Dateinamen für Cover-Bilder:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Angekündigte Modellnummer:"
 
@@ -123,6 +126,10 @@ msgstr ""
 "Protokolldateien ablegt."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Diese Option aktivieren um den Inotify-Mechanismus zum Entdecken neuer "
@@ -149,7 +156,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Spezifiziert die zu durchsuchenden Medienverzeichnisse. Durch Voranstellung "
 "eines Buchstaben gefolgt von einem Komma kann ein Verzeichnis auf einen "
index 48c6188..d319afd 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 5934d42..ca5bc3b 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr "Album art names:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Announced model number:"
 
@@ -121,6 +124,10 @@ msgstr ""
 "to store its log file."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Set this to enable inotify monitoring to automatically discover new files."
@@ -145,12 +152,12 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Specify the path to the MiniSSDPd socket."
index 5f6b396..f71e9a2 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Configuración avanzada"
 msgid "Album art names:"
 msgstr "Imágenes de álbumes:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Número de modelo declarado:"
 
@@ -121,6 +124,10 @@ msgid ""
 msgstr "Indicar el directorio donde MiniDLNA guardará su archivo de registro."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr "Inotify descubrirá automáticamente nuevos archivos."
 
@@ -142,12 +149,12 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Directorio a explorar. Si quiere restringir el directorio a un contenido "
 "específico puede añadir el tipo ('A' par audio, 'V' para vídeo o 'P' para "
-"imágenes), seguido por una coma al nombre del directorio (ej. media_dir=A,/"
-"mnt/media/Music). Se puede establecer varios directorios."
+"imágenes), seguido por una coma al nombre del directorio (ej. A,/mnt/media/"
+"Music). Se puede establecer varios directorios."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Camino al socket de MiniSSDPd."
index d638b0c..498dea6 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 48c6188..d319afd 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 52fbe74..c1371af 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Haladó beállítások"
 msgid "Album art names:"
 msgstr "Borító album nevek:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Közölt modellszám:"
 
@@ -123,6 +126,10 @@ msgstr ""
 "állományait mentse."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Engedélyezze az új fájlok automatikus felfedezéséhez szükséges inotify "
@@ -147,12 +154,12 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Állítsa be a vizsgálandó könyvtárra. Ha a könyvtárat egy adott típusú "
 "tartalom szerint szeretné korlátozni, akkor a neve előtt vesszővel "
 "elválasztva megadhatja a típust ('A' az audió, 'V' a videó, 'P' a képek "
-"számára. pl.: media_dir=A,/mnt/media/Music). Több könyvtár is megadható."
+"számára. pl.: A,/mnt/media/Music). Több könyvtár is megadható."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "A MiniSSDPd socket elérési útját határozza meg."
index 1c0abc6..4ecc3d4 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Opzioni avanzate"
 msgid "Album art names:"
 msgstr "Nome Copertina Album:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Numero modello annunciato:"
 
@@ -101,8 +104,7 @@ msgid ""
 "Serial number the miniDLNA daemon will report to clients in its XML "
 "description."
 msgstr ""
-"Serial number che il server miniDLNA invierà ai client nella descrizione "
-"XML."
+"Serial number che il server miniDLNA invierà ai client nella descrizione XML."
 
 msgid ""
 "Set this if you want to customize the name that shows up on your clients."
@@ -123,6 +125,10 @@ msgstr ""
 "desidera che MiniDLNA archivi i propri file di registro."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Impostare questa opzione per consentire il monitoraggio inotify per rilevare "
@@ -132,8 +138,8 @@ msgid ""
 "Set this to enable support for streaming .jpg and .mp3 files to a TiVo "
 "supporting HMO."
 msgstr ""
-"Impostare questo per abilitare il supporto per lo streaming di file .jpg e "
-".mp3 ad un supporto TiVo che supporta HMO."
+"Impostare questo per abilitare il supporto per lo streaming di file .jpg e ."
+"mp3 ad un supporto TiVo che supporta HMO."
 
 msgid ""
 "Set this to strictly adhere to DLNA standards. This will allow server-side "
@@ -149,13 +155,13 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Impostare la cartella che si desidera sottoporre a scansione. Se si desidera "
 "limitare la directory per un tipo di contenuto specifico, è possibile "
 "anteporre il tipo ('A' per l'audio, 'V' per video, 'P' per le immagini), "
-"seguito da una virgola, nella cartella (es. media_dir = A,/mnt/media/Music). "
-"Cartelle multiple possono essere specificate."
+"seguito da una virgola, nella cartella (es. A,/mnt/media/Music). Cartelle "
+"multiple possono essere specificate."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Specificare il percorso del socket MiniSSDPd."
@@ -170,8 +176,7 @@ msgid ""
 "The miniDLNA service is active, serving %d audio, %d video and %d image "
 "files."
 msgstr ""
-"Il servizio miniDLNA è attivo, servo %d audio, %d video, %d file di "
-"immagine."
+"Il servizio miniDLNA è attivo, servo %d audio, %d video, %d file di immagine."
 
 msgid "The miniDLNA service is not running."
 msgstr "Il servizio miniDLNA non è in esecuzione."
index 4cfc338..de2eb9b 100644 (file)
@@ -1,21 +1,25 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-04-10 09:10+0200\n"
-"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-10-25 22:33+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language-Team: none\n"
 "Language: ja\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.4\n"
+"X-Generator: Poedit 2.0.4\n"
+"POT-Creation-Date: \n"
 
 msgid "Advanced Settings"
 msgstr "詳細設定"
 
 msgid "Album art names:"
-msgstr "アルバムアートワーク・ファイル名:"
+msgstr "アルバムアートワーク ファイル名:"
+
+msgid "Allow wide links:"
+msgstr "ワイド リンクの許可:"
 
 msgid "Announced model number:"
 msgstr "通知するモデル番号:"
@@ -117,6 +121,12 @@ msgid ""
 msgstr "miniDLNAが書きだすログファイルのディレクトリパスを設定してください。"
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+"シンボリックリンクを通してメディア ルート外のコンテンツの提供を許可するには、"
+"このオプションを有効にしてください。"
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "inotifyを使用した新規ファイルの自動検知を有効にする場合、このオプションを有効"
@@ -143,13 +153,13 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "miniDLNA がスキャンするディレクトリを設定します。ディレクトリを特定のコンテン"
 "ツに制限したい場合、タイプをパスのはじめに付け、コンマ記号で区切ることで設定"
 "できます ('A'=オーディオ \"audio\", 'V'=ビデオ \"video\", 'P'=写真 \"images"
-"\", 例: media_dir=A,/mnt/media/Music)。また、このオプションは複数のディレクト"
-"リを登録可能です。"
+"\", 例: A,/mnt/media/Music)。また、このオプションは複数のディレクトリを登録可"
+"能です。"
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "MiniSSDPd ソケットのパスを設定してください。"
@@ -164,8 +174,8 @@ msgid ""
 "The miniDLNA service is active, serving %d audio, %d video and %d image "
 "files."
 msgstr ""
-"miniDLNA サービスは稼働中です。%d 個の音楽ファイル , %d 個のビデオファイル, %"
-"d 個の写真ファイルを認識しています。"
+"miniDLNA サービスは稼働中です。%d 個の音楽ファイル , %d 個のビデオファイル, "
+"%d 個の写真ファイルを認識しています。"
 
 msgid "The miniDLNA service is not running."
 msgstr "miniDLNA サービスは稼働していません。"
index 8df98a8..7372c90 100644 (file)
@@ -13,6 +13,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -109,6 +112,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -127,7 +134,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 4b24712..daf1996 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Avanserte Innstillinger"
 msgid "Album art names:"
 msgstr "Albumbilder navn:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Annonsert modellnummer:"
 
@@ -60,8 +63,8 @@ msgid ""
 "MiniDLNA is server software with the aim of being fully compliant with DLNA/"
 "UPnP-AV clients."
 msgstr ""
-"MiniDLNA er serverprogramvare som sikter på å være fullt kompatibel med DLNA"
-"/UPnP-AV klienter."
+"MiniDLNA er serverprogramvare som sikter på å være fullt kompatibel med DLNA/"
+"UPnP-AV klienter."
 
 msgid ""
 "Model number the miniDLNA daemon will report to clients in its XML "
@@ -122,6 +125,10 @@ msgstr ""
 "filen i."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Her kan en aktivere inotify som overvåker mediakatalogene og dermed "
@@ -147,12 +154,12 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Her kan en velge den katalogen som blir skannet. Om du ønsker å begrense "
 "katalogen til en spesifikk innholdstype kan sette en bokstav foran ('A' for "
-"lyd, 'V' for video, 'P' for bilder), etterfulgt av et komma og katalogen. "
-"(f.eks media_dir=A,/mnt/media/Musikk). Flere kataloger kan brukes."
+"lyd, 'V' for video, 'P' for bilder), etterfulgt av et komma og katalogen. (f."
+"eks A,/mnt/media/Musikk). Flere kataloger kan brukes."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Angi banen til MiniSSDPd socketen."
index b4a8a6f..8c03b51 100644 (file)
@@ -18,6 +18,9 @@ msgstr "Ustawienia zaawansowane"
 msgid "Album art names:"
 msgstr "Nazwy okładek albumów:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Rozgłaszany model:"
 
@@ -121,6 +124,10 @@ msgstr ""
 "dzienniki (logi)."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Ustaw to, aby włączyć monitorowanie inotify, by automatycznie wykrywać nowe "
@@ -146,12 +153,12 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Ustaw tu folder, który chcesz skanować. Jeśli chcesz ograniczyć folder do "
 "konkretnego typu zawartości, możesz poprzedzić ścieżkę typem (\"A\" dla "
-"audio, \"V\" dla wideo, \"P\" dla obrazów) i przecinkiem (np media_dir=A,/"
-"mnt/media/Muzyka). Możesz podać kilka folderów."
+"audio, \"V\" dla wideo, \"P\" dla obrazów) i przecinkiem (np A,/mnt/media/"
+"Muzyka). Możesz podać kilka folderów."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Podaj ścieżkę do gniazda (socketu) miniSSDPd."
index 3d53abd..5ae9226 100644 (file)
@@ -14,6 +14,9 @@ msgstr "Configuração Avançada"
 msgid "Album art names:"
 msgstr "Nomes do Álbum artistico: "
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "numero de modelo anunciado:"
 
@@ -122,6 +125,10 @@ msgstr ""
 "deseja MiniDLNA para armazenar seu arquivo de log."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Defina esta opção para permitir o monitoramento inotify para descobrir "
@@ -148,13 +155,13 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Defina esta opção para o diretório que você deseja verificar. Se você quiser "
 "restringir o diretório para um tipo específico de conteúdo, você pode "
 "prefixar o tipo ('A' para áudio, 'V' para o vídeo, 'P' para imagens), "
-"seguido por uma vírgula, para o diretório (por exemplo media_dir = A, / "
-"mnt / media / Música). Vários diretórios podem ser especificados."
+"seguido por uma vírgula, para o diretório (por exemplo A, / mnt / media / "
+"Música). Vários diretórios podem ser especificados."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Especifique o caminho para o soquete MiniSSDPd."
index 96132cd..dbd835f 100644 (file)
@@ -17,6 +17,9 @@ msgstr "Definições Avançadas"
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Número modelo anunciado:"
 
@@ -117,6 +120,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -135,7 +142,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index cba5fe6..5e79cd2 100644 (file)
@@ -18,6 +18,9 @@ msgstr "Setări avansate"
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -114,6 +117,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -132,7 +139,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 539e8ca..28ae316 100644 (file)
@@ -20,6 +20,9 @@ msgstr "Расширенные настройки"
 msgid "Album art names:"
 msgstr "Имена обложек альбома:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "Номер модели:"
 
@@ -123,6 +126,10 @@ msgid ""
 msgstr "Папка, в которой miniDLNA будет хранить свой файл журнала."
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 "Включение наблюдения inotify для автоматического обнаружения новых файлов."
@@ -148,13 +155,13 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 "Директории, которые необходимо сканировать. Если вы хотите установить "
 "ограничение на определённый тип содержимого в директории, вы можете написать "
 "тип ('A' для аудио, 'V' для видео, 'P' для изображений) перед путём к "
-"директории, за которым следует запятая (напр. media_dir=A,/mnt/media/Music). "
-"Ð\9cожеÑ\82 Ð±Ñ\8bÑ\82Ñ\8c Ñ\83казано Ð½ÐµÑ\81колÑ\8cко Ð´Ð¸Ñ\80екÑ\82оÑ\80ий."
+"директории, за которым следует запятая (напр. A,/mnt/media/Music). Может "
+"быть указано несколько директорий."
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "Укажите путь к сокету MiniSSDPd."
index 19c3e53..2968311 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 51a3f3a..d06abfd 100644 (file)
@@ -15,6 +15,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -111,6 +114,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -129,7 +136,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 2b35d1e..0f22c67 100644 (file)
@@ -7,6 +7,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -103,6 +106,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -121,7 +128,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 070d64c..1eeba3f 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 7df732f..db23241 100644 (file)
@@ -15,6 +15,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -111,6 +114,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -129,7 +136,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 070d64c..1eeba3f 100644 (file)
@@ -14,6 +14,9 @@ msgstr ""
 msgid "Album art names:"
 msgstr ""
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr ""
 
@@ -110,6 +113,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -128,7 +135,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index 9989756..76ebcda 100644 (file)
@@ -17,6 +17,9 @@ msgstr "高级设置"
 msgid "Album art names:"
 msgstr "专辑封面名称:"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "通告型号:"
 
@@ -113,6 +116,10 @@ msgid ""
 msgstr "设置miniDLNA日志目录"
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr "设定启用inotify监控,自动发现新的文件。"
 
@@ -129,15 +136,16 @@ msgstr ""
 "设定严格遵守DLNA标准。这将允许服务器端降小大尺寸JPEG图像,在(至少)索尼DLNA"
 "的产品这可能会降低JPEG服务性能。"
 
-# 如果写成media_dir=A,/mnt/media/Music,uci会报错。实际上应该是A,/mnt/media/Music,这样生成的minidlna.conf刚好是media_dir=A,/mnt/media/Music
+# 如果写成A,/mnt/media/Music,uci会报错。实际上应该是A,/mnt/media/Music,这样生成的minidlna.conf刚好是A,/mnt/media/Music
 msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
-"设置要扫描的目录。如果你想限制特定内容类型的目录,你可以在前面加上类型(用于音频'A','V'视频,'P'图片),其次是用逗号分隔的目录(如A,/mnt"
-"/媒体/音乐)。可以指定多个目录。"
+"设置要扫描的目录。如果您想限制特定内容类型的目录,您可以在前面加上类型(用于"
+"音频'A','V'视频,'P'图片),其次是用逗号分隔的目录(如A,/mnt/媒体/音乐)。可"
+"以指定多个目录。"
 
 msgid "Specify the path to the MiniSSDPd socket."
 msgstr "指定MiniSSDPd socket的路径。"
index 1af3280..2c63675 100644 (file)
@@ -17,6 +17,9 @@ msgstr "進階設定值"
 msgid "Album art names:"
 msgstr "專輯名稱"
 
+msgid "Allow wide links:"
+msgstr ""
+
 msgid "Announced model number:"
 msgstr "已宣告型號數量"
 
@@ -113,6 +116,10 @@ msgid ""
 msgstr ""
 
 msgid ""
+"Set this to allow serving content outside the media root (via symlinks)."
+msgstr ""
+
+msgid ""
 "Set this to enable inotify monitoring to automatically discover new files."
 msgstr ""
 
@@ -131,7 +138,7 @@ msgid ""
 "Set this to the directory you want scanned. If you want to restrict the "
 "directory to a specific content type, you can prepend the type ('A' for "
 "audio, 'V' for video, 'P' for images), followed by a comma, to the directory "
-"(eg. media_dir=A,/mnt/media/Music). Multiple directories can be specified."
+"(eg. A,/mnt/media/Music). Multiple directories can be specified."
 msgstr ""
 
 msgid "Specify the path to the MiniSSDPd socket."
index df43c1b..4757030 100755 (executable)
@@ -1,10 +1,5 @@
 #!/bin/sh
 
-/etc/init.d/minidlna enabled && {
-       /etc/init.d/minidlna stop
-       /etc/init.d/minidlna disable
-}
-
 uci -q batch <<-EOF >/dev/null
        delete ucitrack.minidlna
        set ucitrack.minidlna=minidlna
diff --git a/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po b/applications/luci-app-mjpg-streamer/po/pt-br/mjpg-streamer.po
new file mode 100644 (file)
index 0000000..28bfa18
--- /dev/null
@@ -0,0 +1,172 @@
+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 "Allow ringbuffer to exceed limit by this amount"
+msgstr "Permitir que o buffer em anel exceda o limite por essa quantidade"
+
+msgid "Ask for username and password on connect"
+msgstr "Pergunte por um usuário e senha na conexão"
+
+msgid "Authentication required"
+msgstr "Requer autenticação"
+
+msgid "Auto"
+msgstr "Automático"
+
+msgid "Automatic disabling of MJPEG mode"
+msgstr "Desativação automática do modo MJPEG"
+
+msgid "Blink"
+msgstr "Pisca"
+
+msgid "Check to save the stream to an mjpeg file"
+msgstr "Marque para salvar o fluxo em um arquivo MJPEG"
+
+msgid "Command to run"
+msgstr "Comando para executar:"
+
+msgid "Device"
+msgstr "Dispositivo"
+
+msgid "Do not initalize dynctrls of Linux-UVC driver"
+msgstr "Não inicie o dynctrls do driver do Linux-UVC"
+
+msgid "Don't initalize dynctrls"
+msgstr "Não inicia o dynctrls"
+
+msgid "Drop frames smaller then this limit"
+msgstr "Descarte quadros menores que este limite"
+
+msgid "Enable MJPG-streamer"
+msgstr "Ativa o MJPG-streamer"
+
+msgid "Enable YUYV format"
+msgstr "Ativar Formato YUYV"
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid "Exceed"
+msgstr "Ultrapassado"
+
+msgid ""
+"Execute command after saving picture. Mjpg-streamer parse the filename as "
+"first parameter to your script."
+msgstr ""
+"Execute o comando depois de salvar a imagem. Mjpg-streamer passa o nome do "
+"arquivo como primeiro parâmetro para o comando."
+
+msgid "File input"
+msgstr "Entrada do arquivo"
+
+msgid "File output"
+msgstr "Saída do arquivo"
+
+msgid "Folder"
+msgstr "Pasta"
+
+msgid "Folder that contains webpages"
+msgstr "Pasta que contém páginas web"
+
+msgid "Frames per second"
+msgstr "Quadros por segundos"
+
+msgid "General"
+msgstr "Geral"
+
+msgid "HTTP output"
+msgstr "Saída HTTP"
+
+msgid "Input plugin"
+msgstr "Plugins de entrada"
+
+msgid "Interval between saving pictures"
+msgstr "Intervalo entre o salvamento das imagens"
+
+msgid "JPEG compression quality"
+msgstr "Qualidade da compressão JPEG"
+
+msgid "Led control"
+msgstr "Controle de LED"
+
+msgid "MJPG-streamer"
+msgstr "MJPG-streamer"
+
+msgid "Max. number of pictures to hold"
+msgstr "Número máximo de imagens a serem mantidas"
+
+msgid "Mjpeg output"
+msgstr "Saída Mjpeg"
+
+msgid "Off"
+msgstr "Desligado"
+
+msgid "On"
+msgstr "Ligado"
+
+msgid "Output plugin"
+msgstr "Plugin de saída"
+
+msgid "Password"
+msgstr "Senha"
+
+msgid "Plugin settings"
+msgstr "Configurações do Plugin"
+
+msgid "Port"
+msgstr "Porta"
+
+msgid "Resolution"
+msgstr "Resolução"
+
+msgid "Ring buffer size"
+msgstr "Tamanho do buffer em anel"
+
+msgid "Set folder to save pictures"
+msgstr "Definir pasta para salvas as imagens"
+
+msgid "Set the inteval in millisecond"
+msgstr "Defina o intervalo em milisegundos"
+
+msgid ""
+"Set the minimum size if the webcam produces small-sized garbage frames. May "
+"happen under low light conditions"
+msgstr ""
+"Defina o tamanho mínimo se a webcam produz quadros lixo de tamanho pequeno. "
+"Pode acontecer sob condições de pouca luz"
+
+msgid ""
+"Set the quality in percent. This setting activates YUYV format, disables "
+"MJPEG"
+msgstr ""
+"Defina a qualidade em porcentagem. Esta definição ativa o formato YUYV, "
+"desativa MJPEG"
+
+msgid "TCP port for this HTTP server"
+msgstr "Porta TCP para este servidor HTTP"
+
+msgid "UVC input"
+msgstr "Dispositivo UVC de entrada"
+
+msgid "Username"
+msgstr "Usuário"
+
+msgid "WWW folder"
+msgstr "Pasta WWW"
+
+msgid ""
+"mjpg streamer is a streaming application for Linux-UVC compatible webcams"
+msgstr ""
+"Mjpg streamer é uma aplicação de streaming para webcams compatíveis com o "
+"Linux-UVC"
diff --git a/applications/luci-app-mwan3/Makefile b/applications/luci-app-mwan3/Makefile
new file mode 100644 (file)
index 0000000..d65cd3a
--- /dev/null
@@ -0,0 +1,19 @@
+#
+# Copyright (C) 2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for the MWAN3 multiwan hotplug script
+LUCI_DEPENDS:=+mwan3 +luci-mod-admin-full +luci-app-firewall +luci-lib-nixio
+LUCI_PKGARCH:=all
+PKG_LICENSE:=GPLv2
+
+PKG_MAINTAINER:=Aedan Renner <chipdankly@gmail.com> \
+               Florian Eckert <fe@dev.tdt.de>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-mwan3/luasrc/controller/mwan3.lua b/applications/luci-app-mwan3/luasrc/controller/mwan3.lua
new file mode 100644 (file)
index 0000000..c24beda
--- /dev/null
@@ -0,0 +1,333 @@
+module("luci.controller.mwan3", package.seeall)
+
+sys = require "luci.sys"
+ut = require "luci.util"
+
+ip = "ip -4 "
+
+function index()
+       if not nixio.fs.access("/etc/config/mwan3") then
+               return
+       end
+
+       entry({"admin", "network", "mwan"},
+               alias("admin", "network", "mwan", "overview"),
+               _("Load Balancing"), 600)
+
+       entry({"admin", "network", "mwan", "overview"},
+               alias("admin", "network", "mwan", "overview", "overview_interface"),
+               _("Overview"), 10)
+       entry({"admin", "network", "mwan", "overview", "overview_interface"},
+               template("mwan/overview_interface"))
+       entry({"admin", "network", "mwan", "overview", "interface_status"},
+               call("interfaceStatus"))
+       entry({"admin", "network", "mwan", "overview", "overview_detailed"},
+               template("mwan/overview_detailed"))
+       entry({"admin", "network", "mwan", "overview", "detailed_status"},
+               call("detailedStatus"))
+
+       entry({"admin", "network", "mwan", "configuration"},
+               alias("admin", "network", "mwan", "configuration", "interface"),
+               _("Configuration"), 20)
+       entry({"admin", "network", "mwan", "configuration", "globals"},
+               cbi("mwan/globalsconfig"),_("Globals"), 5).leaf = true
+       entry({"admin", "network", "mwan", "configuration", "interface"},
+               arcombine(cbi("mwan/interface"), cbi("mwan/interfaceconfig")),
+               _("Interfaces"), 10).leaf = true
+       entry({"admin", "network", "mwan", "configuration", "member"},
+               arcombine(cbi("mwan/member"), cbi("mwan/memberconfig")),
+               _("Members"), 20).leaf = true
+       entry({"admin", "network", "mwan", "configuration", "policy"},
+               arcombine(cbi("mwan/policy"), cbi("mwan/policyconfig")),
+               _("Policies"), 30).leaf = true
+       entry({"admin", "network", "mwan", "configuration", "rule"},
+               arcombine(cbi("mwan/rule"), cbi("mwan/ruleconfig")),
+               _("Rules"), 40).leaf = true
+
+       entry({"admin", "network", "mwan", "advanced"},
+               alias("admin", "network", "mwan", "advanced", "hotplugscript"),
+               _("Advanced"), 100)
+       entry({"admin", "network", "mwan", "advanced", "hotplugscript"},
+               form("mwan/advanced_hotplugscript"))
+       entry({"admin", "network", "mwan", "advanced", "mwanconfig"},
+               form("mwan/advanced_mwanconfig"))
+       entry({"admin", "network", "mwan", "advanced", "networkconfig"},
+               form("mwan/advanced_networkconfig"))
+       entry({"admin", "network", "mwan", "advanced", "wirelessconfig"},
+               form("mwan/advanced_wirelessconfig"))
+       entry({"admin", "network", "mwan", "advanced", "diagnostics"},
+               template("mwan/advanced_diagnostics"))
+       entry({"admin", "network", "mwan", "advanced", "diagnostics_display"},
+               call("diagnosticsData"), nil).leaf = true
+       entry({"admin", "network", "mwan", "advanced", "troubleshooting"},
+               template("mwan/advanced_troubleshooting"))
+       entry({"admin", "network", "mwan", "advanced", "troubleshooting_display"},
+               call("troubleshootingData"))
+end
+
+function getInterfaceStatus(ruleNumber, interfaceName)
+       if ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interfaceName .. ".enabled")) == "1" then
+               if ut.trim(sys.exec(ip .. "route list table " .. ruleNumber)) ~= "" then
+                       if ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interfaceName .. ".track_ip")) ~= "" then
+                               return "online"
+                       else
+                               return "notMonitored"
+                       end
+               else
+                       return "offline"
+               end
+       else
+               return "notEnabled"
+       end
+end
+
+function getInterfaceName()
+       local ruleNumber, status = 0, ""
+       uci.cursor():foreach("mwan3", "interface",
+               function (section)
+                       ruleNumber = ruleNumber+1
+                       status = status .. section[".name"] .. "[" .. getInterfaceStatus(ruleNumber, section[".name"]) .. "]"
+               end
+       )
+       return status
+end
+
+function interfaceStatus()
+       local ntm = require "luci.model.network".init()
+
+       local mArray = {}
+
+       -- overview status
+       local statusString = getInterfaceName()
+       if statusString ~= "" then
+               mArray.wans = {}
+               wansid = {}
+
+               for wanName, interfaceState in string.gfind(statusString, "([^%[]+)%[([^%]]+)%]") do
+                       local wanInterfaceName = ut.trim(sys.exec("uci -q -p /var/state get network." .. wanName .. ".ifname"))
+                               if wanInterfaceName == "" then
+                                       wanInterfaceName = "X"
+                               end
+                       local wanDeviceLink = ntm:get_interface(wanInterfaceName)
+                               wanDeviceLink = wanDeviceLink and wanDeviceLink:get_network()
+                               wanDeviceLink = wanDeviceLink and wanDeviceLink:adminlink() or "#"
+                       wansid[wanName] = #mArray.wans + 1
+                       mArray.wans[wansid[wanName]] = { name = wanName, link = wanDeviceLink, ifname = wanInterfaceName, status = interfaceState }
+               end
+       end
+
+       -- overview status log
+       local mwanLog = ut.trim(sys.exec("logread | grep mwan3 | tail -n 50 | sed 'x;1!H;$!d;x' 2>/dev/null"))
+       if mwanLog ~= "" then
+               mArray.mwanlog = { mwanLog }
+       end
+
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(mArray)
+end
+
+function detailedStatus()
+       local mArray = {}
+
+       -- detailed mwan status
+       local detailStatusInfo = ut.trim(sys.exec("/usr/sbin/mwan3 status"))
+       if detailStatusInfo ~= "" then
+               mArray.mwandetail = { detailStatusInfo }
+       end
+
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(mArray)
+end
+
+function diagnosticsData(interface, tool, task)
+       function getInterfaceNumber()
+               local number = 0
+               uci.cursor():foreach("mwan3", "interface",
+                       function (section)
+                               number = number+1
+                               if section[".name"] == interface then
+                                       interfaceNumber = number
+                               end
+                       end
+               )
+       end
+
+       local mArray = {}
+
+       local results = ""
+       if tool == "service" then
+               os.execute("/usr/sbin/mwan3 " .. task)
+               if task == "restart" then
+                       results = "MWAN3 restarted"
+               elseif task == "stop" then
+                       results = "MWAN3 stopped"
+               else
+                       results = "MWAN3 started"
+               end
+       else
+               local interfaceDevice = ut.trim(sys.exec("uci -q -p /var/state get network." .. interface .. ".ifname"))
+               if interfaceDevice ~= "" then
+                       if tool == "ping" then
+                               local gateway = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $2}'"))
+                               if gateway ~= "" then
+                                       if task == "gateway" then
+                                               local pingCommand = "ping -c 3 -W 2 -I " .. interfaceDevice .. " " .. gateway
+                                               results = pingCommand .. "\n\n" .. sys.exec(pingCommand)
+                                       else
+                                               local tracked = ut.trim(sys.exec("uci -q -p /var/state get mwan3." .. interface .. ".track_ip"))
+                                               if tracked ~= "" then
+                                                       for z in tracked:gmatch("[^ ]+") do
+                                                               local pingCommand = "ping -c 3 -W 2 -I " .. interfaceDevice .. " " .. z
+                                                               results = results .. pingCommand .. "\n\n" .. sys.exec(pingCommand) .. "\n\n"
+                                                       end
+                                               else
+                                                       results = "No tracking IP addresses configured on " .. interface
+                                               end
+                                       end
+                               else
+                                       results = "No default gateway for " .. interface .. " found. Default route does not exist or is configured incorrectly"
+                               end
+                       elseif tool == "rulechk" then
+                               getInterfaceNumber()
+                               local rule1 = sys.exec(ip .. "rule | grep $(echo $((" .. interfaceNumber .. " + 1000)))")
+                               local rule2 = sys.exec(ip .. "rule | grep $(echo $((" .. interfaceNumber .. " + 2000)))")
+                               if rule1 ~= "" and rule2 ~= "" then
+                                       results = "All required interface IP rules found:\n\n" .. rule1 .. rule2
+                               elseif rule1 ~= "" or rule2 ~= "" then
+                                       results = "Missing 1 of the 2 required interface IP rules\n\n\nRules found:\n\n" .. rule1 .. rule2
+                               else
+                                       results = "Missing both of the required interface IP rules"
+                               end
+                       elseif tool == "routechk" then
+                               getInterfaceNumber()
+                               local routeTable = sys.exec(ip .. "route list table " .. interfaceNumber)
+                               if routeTable ~= "" then
+                                       results = "Interface routing table " .. interfaceNumber .. " was found:\n\n" .. routeTable
+                               else
+                                       results = "Missing required interface routing table " .. interfaceNumber
+                               end
+                       elseif tool == "hotplug" then
+                               if task == "ifup" then
+                                       os.execute("/usr/sbin/mwan3 ifup " .. interface)
+                                       results = "Hotplug ifup sent to interface " .. interface .. "..."
+                               else
+                                       os.execute("/usr/sbin/mwan3 ifdown " .. interface)
+                                       results = "Hotplug ifdown sent to interface " .. interface .. "..."
+                               end
+                       end
+               else
+                       results = "Unable to perform diagnostic tests on " .. interface .. ". There is no physical or virtual device associated with this interface"
+               end
+       end
+       if results ~= "" then
+               results = ut.trim(results)
+               mArray.diagnostics = { results }
+       end
+
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(mArray)
+end
+
+function troubleshootingData()
+       local ver = require "luci.version"
+
+       local mArray = {}
+
+       -- software versions
+       local wrtRelease = ut.trim(ver.distversion)
+               if wrtRelease ~= "" then
+                       wrtRelease = "OpenWrt - " .. wrtRelease
+               else
+                       wrtRelease = "OpenWrt - unknown"
+               end
+       local luciRelease = ut.trim(ver.luciversion)
+               if luciRelease ~= "" then
+                       luciRelease = "\nLuCI - " .. luciRelease
+               else
+                       luciRelease = "\nLuCI - unknown"
+               end
+       local mwanVersion = ut.trim(sys.exec("opkg info mwan3 | grep Version | awk '{print $2}'"))
+               if mwanVersion ~= "" then
+                       mwanVersion = "\n\nmwan3 - " .. mwanVersion
+               else
+                       mwanVersion = "\n\nmwan3 - unknown"
+               end
+       local mwanLuciVersion = ut.trim(sys.exec("opkg info luci-app-mwan3 | grep Version | awk '{print $2}'"))
+               if mwanLuciVersion ~= "" then
+                       mwanLuciVersion = "\nmwan3-luci - " .. mwanLuciVersion
+               else
+                       mwanLuciVersion = "\nmwan3-luci - unknown"
+               end
+       mArray.versions = { wrtRelease .. luciRelease .. mwanVersion .. mwanLuciVersion }
+
+       -- mwan config
+       local mwanConfig = ut.trim(sys.exec("cat /etc/config/mwan3"))
+               if mwanConfig == "" then
+                       mwanConfig = "No data found"
+               end
+       mArray.mwanconfig = { mwanConfig }
+
+       -- network config
+       local networkConfig = ut.trim(sys.exec("cat /etc/config/network | sed -e 's/.*username.*/       USERNAME HIDDEN/' -e 's/.*password.*/   PASSWORD HIDDEN/'"))
+               if networkConfig == "" then
+                       networkConfig = "No data found"
+               end
+       mArray.netconfig = { networkConfig }
+
+       -- wireless config
+       local wirelessConfig = ut.trim(sys.exec("cat /etc/config/wireless | sed -e 's/.*username.*/     USERNAME HIDDEN/' -e 's/.*password.*/   PASSWORD HIDDEN/' -e 's/.*key.*/        KEY HIDDEN/'"))
+               if wirelessConfig == "" then
+                       wirelessConfig = "No data found"
+               end
+       mArray.wificonfig = { wirelessConfig }
+       
+       -- ifconfig
+       local ifconfig = ut.trim(sys.exec("ifconfig"))
+               if ifconfig == "" then
+                       ifconfig = "No data found"
+               end
+       mArray.ifconfig = { ifconfig }
+
+       -- route -n
+       local routeShow = ut.trim(sys.exec("route -n"))
+               if routeShow == "" then
+                       routeShow = "No data found"
+               end
+       mArray.routeshow = { routeShow }
+
+       -- ip rule show
+       local ipRuleShow = ut.trim(sys.exec(ip .. "rule show"))
+               if ipRuleShow == "" then
+                       ipRuleShow = "No data found"
+               end
+       mArray.iprule = { ipRuleShow }
+
+       -- ip route list table 1-250
+       local routeList, routeString = ut.trim(sys.exec(ip .. "rule | sed 's/://g' 2>/dev/null | awk '$1>=2001 && $1<=2250' | awk '{print $NF}'")), ""
+               if routeList ~= "" then
+                       for line in routeList:gmatch("[^\r\n]+") do
+                               routeString = routeString .. line .. "\n" .. sys.exec(ip .. "route list table " .. line)
+                       end
+                       routeString = ut.trim(routeString)
+               else
+                       routeString = "No data found"
+               end
+       mArray.routelist = { routeString }
+
+       -- default firewall output policy
+       local firewallOut = ut.trim(sys.exec("uci -q -p /var/state get firewall.@defaults[0].output"))
+               if firewallOut == "" then
+                       firewallOut = "No data found"
+               end
+       mArray.firewallout = { firewallOut }
+
+       -- iptables
+       local iptables = ut.trim(sys.exec("iptables -L -t mangle -v -n"))
+               if iptables == "" then
+                       iptables = "No data found"
+               end
+       mArray.iptables = { iptables }
+
+       luci.http.prepare_content("application/json")
+       luci.http.write_json(mArray)
+end
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_hotplugscript.lua
new file mode 100644 (file)
index 0000000..1b97080
--- /dev/null
@@ -0,0 +1,40 @@
+-- ------ hotplug script configuration ------ --
+
+fs = require "nixio.fs"
+ut = require "luci.util"
+
+script = "/etc/mwan3.user"
+
+m5 = SimpleForm("luci", nil)
+       m5:append(Template("mwan/advanced_hotplugscript")) -- highlight current tab
+
+f = m5:section(SimpleSection, nil,
+       translate("This section allows you to modify the content of \"/etc/mwan3.user\".<br />" ..
+       "The file is also preserved during sysupgrade.<br />" ..
+       "<br />" ..
+       "Notes:<br />" ..
+       "This file is interpreted as a shell script.<br />" ..
+       "The first line of the script must be &#34;#!/bin/sh&#34; without quotes.<br />" ..
+       "Lines beginning with # are comments and are not executed.<br />" ..
+       "Put your custom mwan3 action here, they will<br />" ..
+       "be executed with each netifd hotplug interface event<br />" ..
+       "on interfaces for which mwan3 is enabled.<br />" ..
+       "<br />" ..
+       "There are three main environment variables that are passed to this script.<br />" ..
+       "<br />" ..
+       "$ACTION Either \"ifup\" or \"ifdown\"<br />" ..
+       "$INTERFACE Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")<br />" ..
+       "$DEVICE Physical device name which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br />" ..
+       "<br />"))
+
+t = f:option(TextValue, "lines")
+       t.rmempty = true
+       t.rows = 20
+       function t.cfgvalue()
+               return fs.readfile(script)
+       end
+       function t.write(self, section, data) -- format and write new data to script
+               return fs.writefile(script, ut.trim(data:gsub("\r\n", "\n")) .. "\n")
+       end
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_mwanconfig.lua
new file mode 100644 (file)
index 0000000..e0a99e8
--- /dev/null
@@ -0,0 +1,32 @@
+-- ------ mwan configuration ------ --
+
+ut = require "luci.util"
+
+mwanConfig = "/etc/config/mwan3"
+
+
+m5 = SimpleForm("luci", nil)
+       m5:append(Template("mwan/advanced_mwanconfig")) -- highlight current tab
+
+
+f = m5:section(SimpleSection, nil,
+       translate("This section allows you to modify the contents of /etc/config/mwan3"))
+
+t = f:option(TextValue, "lines")
+       t.rmempty = true
+       t.rows = 20
+
+       function t.cfgvalue()
+               return nixio.fs.readfile(mwanConfig) or ""
+       end
+
+       function t.write(self, section, data) -- format and write new data to script
+               return nixio.fs.writefile(mwanConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
+       end
+
+       function f.handle(self, state, data)
+               return true
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_networkconfig.lua
new file mode 100644 (file)
index 0000000..b93d897
--- /dev/null
@@ -0,0 +1,32 @@
+-- ------ network configuration ------ --
+
+ut = require "luci.util"
+
+networkConfig = "/etc/config/network"
+
+
+m5 = SimpleForm("networkconf", nil)
+       m5:append(Template("mwan/advanced_networkconfig")) -- highlight current tab
+
+
+f = m5:section(SimpleSection, nil,
+       translate("This section allows you to modify the contents of /etc/config/network"))
+
+t = f:option(TextValue, "lines")
+       t.rmempty = true
+       t.rows = 20
+
+       function t.cfgvalue()
+               return nixio.fs.readfile(networkConfig) or ""
+       end
+
+       function t.write(self, section, data) -- format and write new data to script
+               return nixio.fs.writefile(networkConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
+       end
+
+       function f.handle(self, state, data)
+               return true
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/advanced_wirelessconfig.lua
new file mode 100644 (file)
index 0000000..95e9f7c
--- /dev/null
@@ -0,0 +1,32 @@
+-- ------ wireless configuration ------ --
+
+ut = require "luci.util"
+
+wirelessConfig = "/etc/config/wireless"
+
+
+m5 = SimpleForm("wirelessconf", nil)
+       m5:append(Template("mwan/advanced_wirelessconfig")) -- highlight current tab
+
+
+f = m5:section(SimpleSection, nil,
+       translate("This section allows you to modify the contents of /etc/config/wireless"))
+
+t = f:option(TextValue, "lines")
+       t.rmempty = true
+       t.rows = 20
+
+       function t.cfgvalue()
+               return nixio.fs.readfile(wirelessConfig) or ""
+       end
+
+       function t.write(self, section, data) -- format and write new data to script
+               return nixio.fs.writefile(wirelessConfig, "\n" .. ut.trim(data:gsub("\r\n", "\n")) .. "\n")
+       end
+
+       function f.handle(self, state, data)
+               return true
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/globalsconfig.lua
new file mode 100644 (file)
index 0000000..919ed46
--- /dev/null
@@ -0,0 +1,40 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2017 Florian Eckert <fe@dev.tdt.de>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+        http://www.apache.org/licenses/LICENSE-2.0
+
+$Id$
+]]--
+
+local net = require "luci.model.network".init()
+
+m = Map("mwan3")
+
+s = m:section(NamedSection, "globals", "globals", translate("Globals mwan3 options"))
+n = s:option(ListValue, "local_source",
+       translate("Local source interface"),
+       translate("Use the IP address of this interface as source IP address for traffic initiated by the router itself"))
+n:value("none")
+n.default = "none"
+for _, net in ipairs(net:get_networks()) do
+       if net:name() ~= "loopback" then
+               n:value(net:name())
+       end
+end
+n.rmempty = false
+
+mask = s:option(
+       Value,
+       "mmx_mask",
+       translate("Firewall mask"),
+       translate("Enter value in hex, starting with <code>0x</code>"))
+mask.datatype = "hex(4)"
+mask.default = "0xff00"
+
+return m
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interface.lua
new file mode 100644 (file)
index 0000000..5ee5fb3
--- /dev/null
@@ -0,0 +1,276 @@
+-- ------ extra functions ------ --
+
+function interfaceCheck() -- find issues with too many interfaces, reliability and metric
+       uci.cursor():foreach("mwan3", "interface",
+               function (section)
+                       local interfaceName = section[".name"]
+                       interfaceNumber = interfaceNumber+1 -- count number of mwan interfaces configured
+                       -- create list of metrics for none and duplicate checking
+                       local metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName .. ".metric"))
+                       if metricValue == "" then
+                               errorFound = 1
+                               errorNoMetricList = errorNoMetricList .. interfaceName .. " "
+                       else
+                               metricList = metricList .. interfaceName .. " " .. metricValue .. "\n"
+                       end
+                       -- check if any interfaces have a higher reliability requirement than tracking IPs configured
+                       local trackingNumber = tonumber(ut.trim(sys.exec("echo $(uci -p /var/state get mwan3." .. interfaceName .. ".track_ip) | wc -w")))
+                       if trackingNumber > 0 then
+                               local reliabilityNumber = tonumber(ut.trim(sys.exec("uci -p /var/state get mwan3." .. interfaceName .. ".reliability")))
+                               if reliabilityNumber and reliabilityNumber > trackingNumber then
+                                       errorFound = 1
+                                       errorReliabilityList = errorReliabilityList .. interfaceName .. " "
+                               end
+                       end
+                       -- check if any interfaces are not properly configured in /etc/config/network or have no default route in main routing table
+                       if ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName)) == "interface" then
+                               local interfaceDevice = ut.trim(sys.exec("uci -p /var/state get network." .. interfaceName .. ".ifname"))
+                               if interfaceDevice == "uci: Entry not found" or interfaceDevice == "" then
+                                       errorFound = 1
+                                       errorNetConfigList = errorNetConfigList .. interfaceName .. " "
+                                       errorRouteList = errorRouteList .. interfaceName .. " "
+                               else
+                                       local routeCheck = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1}'"))
+                                       if routeCheck == "" then
+                                               errorFound = 1
+                                               errorRouteList = errorRouteList .. interfaceName .. " "
+                                       end
+                               end
+                       else
+                               errorFound = 1
+                               errorNetConfigList = errorNetConfigList .. interfaceName .. " "
+                               errorRouteList = errorRouteList .. interfaceName .. " "
+                       end
+               end
+       )
+       -- check if any interfaces have duplicate metrics
+       local metricDuplicateNumbers = sys.exec("echo '" .. metricList .. "' | awk '{print $2}' | uniq -d")
+       if metricDuplicateNumbers ~= "" then
+               errorFound = 1
+               local metricDuplicates = ""
+               for line in metricDuplicateNumbers:gmatch("[^\r\n]+") do
+                       metricDuplicates = sys.exec("echo '" .. metricList .. "' | grep '" .. line .. "' | awk '{print $1}'")
+                       errorDuplicateMetricList = errorDuplicateMetricList .. metricDuplicates
+               end
+               errorDuplicateMetricList = sys.exec("echo '" .. errorDuplicateMetricList .. "' | tr '\n' ' '")
+       end
+end
+
+function interfaceWarnings() -- display status and warning messages at the top of the page
+       local warnings = ""
+       if interfaceNumber <= 250 then
+               warnings = "<strong>" .. translatef("There are currently %d of 250 supported interfaces configured", interfaceNumber) .. "</strong>"
+       else
+               warnings = "<font color=\"ff0000\"><strong>" .. translatef("WARNING: %d interfaces are configured exceeding the maximum of 250!", interfaceNumber) .. "</strong></font>"
+       end
+       if errorReliabilityList ~= " " then
+               warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: Some interfaces have a higher reliability requirement than there are tracking IP addresses!") .. "</strong></font>"
+       end
+       if errorRouteList ~= " " then
+               warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: Some interfaces have no default route in the main routing table!") .. "</strong></font>"
+       end
+       if errorNetConfigList ~= " " then
+               warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: Some interfaces are configured incorrectly or not at all in /etc/config/network!") .. "</strong></font>"
+       end
+       if errorNoMetricList ~= " " then
+               warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: Some interfaces have no metric configured in /etc/config/network!") .. "</strong></font>"
+       end
+       if errorDuplicateMetricList ~= " " then
+               warnings = warnings .. "<br /><br /><font color=\"ff0000\"><strong>" .. translate("WARNING: Some interfaces have duplicate metrics configured in /etc/config/network!") .. "</strong></font>"
+       end
+       return warnings
+end
+
+-- ------ interface configuration ------ --
+
+dsp = require "luci.dispatcher"
+sys = require "luci.sys"
+ut = require "luci.util"
+
+interfaceNumber = 0
+metricList = ""
+errorFound = 0
+errorDuplicateMetricList = " "
+errorNetConfigList = " "
+errorNoMetricList = " "
+errorReliabilityList = " "
+errorRouteList = " "
+interfaceCheck()
+
+
+m5 = Map("mwan3", translate("MWAN Interface Configuration"),
+       interfaceWarnings())
+       m5:append(Template("mwan/config_css"))
+
+
+mwan_interface = m5:section(TypedSection, "interface", translate("Interfaces"),
+       translate("MWAN supports up to 250 physical and/or logical interfaces<br />" ..
+       "MWAN requires that all interfaces have a unique metric configured in /etc/config/network<br />" ..
+       "Names must match the interface name found in /etc/config/network (see advanced tab)<br />" ..
+       "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" ..
+       "Interfaces may not share the same name as configured members, policies or rules"))
+       mwan_interface.addremove = true
+       mwan_interface.dynamic = false
+       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)
+               TypedSection.create(self, section)
+               m5.uci:save("mwan3")
+               luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "interface", section))
+       end
+
+
+enabled = mwan_interface:option(DummyValue, "enabled", translate("Enabled"))
+       enabled.rawhtml = true
+       function enabled.cfgvalue(self, s)
+               if self.map:get(s, "enabled") == "1" then
+                       return "Yes"
+               else
+                       return "No"
+               end
+       end
+
+track_ip = mwan_interface:option(DummyValue, "track_ip", translate("Tracking IP"))
+       track_ip.rawhtml = true
+       function track_ip.cfgvalue(self, s)
+               tracked = self.map:get(s, "track_ip")
+               if tracked then
+                       local ipList = ""
+                       for k,v in pairs(tracked) do
+                               ipList = ipList .. v .. "<br />"
+                       end
+                       return ipList
+               else
+                       return "&#8212;"
+               end
+       end
+
+track_method = mwan_interface:option(DummyValue, "track_method", translate("Tracking method"))
+       track_method.rawhtml = true
+       function track_method.cfgvalue(self, s)
+               if tracked then
+                       return self.map:get(s, "track_method") or "&#8212;"
+               else
+                       return "&#8212;"
+               end
+       end
+
+reliability = mwan_interface:option(DummyValue, "reliability", translate("Tracking reliability"))
+       reliability.rawhtml = true
+       function reliability.cfgvalue(self, s)
+               if tracked then
+                       return self.map:get(s, "reliability") or "&#8212;"
+               else
+                       return "&#8212;"
+               end
+       end
+
+count = mwan_interface:option(DummyValue, "count", translate("Ping count"))
+       count.rawhtml = true
+       function count.cfgvalue(self, s)
+               if tracked then
+                       return self.map:get(s, "count") or "&#8212;"
+               else
+                       return "&#8212;"
+               end
+       end
+
+timeout = mwan_interface:option(DummyValue, "timeout", translate("Ping timeout"))
+       timeout.rawhtml = true
+       function timeout.cfgvalue(self, s)
+               if tracked then
+                       local timeoutValue = self.map:get(s, "timeout")
+                       if timeoutValue then
+                               return timeoutValue .. "s"
+                       else
+                               return "&#8212;"
+                       end
+               else
+                       return "&#8212;"
+               end
+       end
+
+interval = mwan_interface:option(DummyValue, "interval", translate("Ping interval"))
+       interval.rawhtml = true
+       function interval.cfgvalue(self, s)
+               if tracked then
+                       local intervalValue = self.map:get(s, "interval")
+                       if intervalValue then
+                               return intervalValue .. "s"
+                       else
+                               return "&#8212;"
+                       end
+               else
+                       return "&#8212;"
+               end
+       end
+
+down = mwan_interface:option(DummyValue, "down", translate("Interface down"))
+       down.rawhtml = true
+       function down.cfgvalue(self, s)
+               if tracked then
+                       return self.map:get(s, "down") or "&#8212;"
+               else
+                       return "&#8212;"
+               end
+       end
+
+up = mwan_interface:option(DummyValue, "up", translate("Interface up"))
+       up.rawhtml = true
+       function up.cfgvalue(self, s)
+               if tracked then
+                       return self.map:get(s, "up") or "&#8212;"
+               else
+                       return "&#8212;"
+               end
+       end
+
+metric = mwan_interface:option(DummyValue, "metric", translate("Metric"))
+       metric.rawhtml = true
+       function metric.cfgvalue(self, s)
+               local metricValue = sys.exec("uci -p /var/state get network." .. s .. ".metric")
+               if metricValue ~= "" then
+                       return metricValue
+               else
+                       return "&#8212;"
+               end
+       end
+
+errors = mwan_interface:option(DummyValue, "errors", translate("Errors"))
+       errors.rawhtml = true
+       function errors.cfgvalue(self, s)
+               if errorFound == 1 then
+                       local mouseOver, lineBreak = "", ""
+                       if string.find(errorReliabilityList, " " .. s .. " ") then
+                               mouseOver = "Higher reliability requirement than there are tracking IP addresses"
+                               lineBreak = "&#10;&#10;"
+                       end
+                       if string.find(errorRouteList, " " .. s .. " ") then
+                               mouseOver = mouseOver .. lineBreak .. "No default route in the main routing table"
+                               lineBreak = "&#10;&#10;"
+                       end
+                       if string.find(errorNetConfigList, " " .. s .. " ") then
+                               mouseOver = mouseOver .. lineBreak .. "Configured incorrectly or not at all in /etc/config/network"
+                               lineBreak = "&#10;&#10;"
+                       end
+                       if string.find(errorNoMetricList, " " .. s .. " ") then
+                               mouseOver = mouseOver .. lineBreak .. "No metric configured in /etc/config/network"
+                               lineBreak = "&#10;&#10;"
+                       end
+                       if string.find(errorDuplicateMetricList, " " .. s .. " ") then
+                               mouseOver = mouseOver .. lineBreak .. "Duplicate metric configured in /etc/config/network"
+                       end
+                       if mouseOver == "" then
+                               return ""
+                       else
+                               return "<span title=\"" .. mouseOver .. "\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>"
+                       end
+               else
+                       return ""
+               end
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/interfaceconfig.lua
new file mode 100644 (file)
index 0000000..a7d7c5a
--- /dev/null
@@ -0,0 +1,266 @@
+-- ------ extra functions ------ --
+
+function interfaceCheck()
+       metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. arg[1] .. ".metric"))
+       if metricValue == "" then -- no metric
+               errorNoMetric = 1
+       else -- if metric exists create list of interface metrics to compare against for duplicates
+               uci.cursor():foreach("mwan3", "interface",
+                       function (section)
+                               local metricValue = ut.trim(sys.exec("uci -p /var/state get network." .. section[".name"] .. ".metric"))
+                               metricList = metricList .. section[".name"] .. " " .. metricValue .. "\n"
+                       end
+               )
+               -- compare metric against list
+               local metricDuplicateNumbers, metricDuplicates = sys.exec("echo '" .. metricList .. "' | awk '{print $2}' | uniq -d"), ""
+               for line in metricDuplicateNumbers:gmatch("[^\r\n]+") do
+                       metricDuplicates = sys.exec("echo '" .. metricList .. "' | grep '" .. line .. "' | awk '{print $1}'")
+                       errorDuplicateMetricList = errorDuplicateMetricList .. metricDuplicates
+               end
+               if sys.exec("echo '" .. errorDuplicateMetricList .. "' | grep -w " .. arg[1]) ~= "" then
+                       errorDuplicateMetric = 1
+               end
+       end
+       -- check if this interface has a higher reliability requirement than track IPs configured
+       local trackingNumber = tonumber(ut.trim(sys.exec("echo $(uci -p /var/state get mwan3." .. arg[1] .. ".track_ip) | wc -w")))
+       if trackingNumber > 0 then
+               local reliabilityNumber = tonumber(ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".reliability")))
+               if reliabilityNumber and reliabilityNumber > trackingNumber then
+                       errorReliability = 1
+               end
+       end
+       -- check if any interfaces are not properly configured in /etc/config/network or have no default route in main routing table
+       if ut.trim(sys.exec("uci -p /var/state get network." .. arg[1])) == "interface" then
+               local interfaceDevice = ut.trim(sys.exec("uci -p /var/state get network." .. arg[1] .. ".ifname"))
+               if interfaceDevice == "uci: Entry not found" or interfaceDevice == "" then
+                       errorNetConfig = 1
+                       errorRoute = 1
+               else
+                       local routeCheck = ut.trim(sys.exec("route -n | awk '{if ($8 == \"" .. interfaceDevice .. "\" && $1 == \"0.0.0.0\" && $3 == \"0.0.0.0\") print $1}'"))
+                       if routeCheck == "" then
+                               errorRoute = 1
+                       end
+               end
+       else
+               errorNetConfig = 1
+               errorRoute = 1
+       end
+end
+
+function interfaceWarnings() -- display warning messages at the top of the page
+       local warns, lineBreak = "", ""
+       if errorReliability == 1 then
+               warns = "<font color=\"ff0000\"><strong>" .. translate("WARNING: This interface has a higher reliability requirement than there are tracking IP addresses!") .. "</strong></font>"
+               lineBreak = "<br /><br />"
+       end
+       if errorRoute == 1 then
+               warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: This interface has no default route in the main routing table!") .. "</strong></font>"
+               lineBreak = "<br /><br />"
+       end
+       if errorNetConfig == 1 then
+               warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: This interface is configured incorrectly or not at all in /etc/config/network!") .. "</strong></font>"
+               lineBreak = "<br /><br />"
+       end
+       if errorNoMetric == 1 then
+               warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: This interface has no metric configured in /etc/config/network!") .. "</strong></font>"
+       elseif errorDuplicateMetric == 1 then
+               warns = warns .. lineBreak .. "<font color=\"ff0000\"><strong>" .. translate("WARNING: This and other interfaces have duplicate metrics configured in /etc/config/network!") .. "</strong></font>"
+       end
+       return warns
+end
+
+-- ------ interface configuration ------ --
+
+dsp = require "luci.dispatcher"
+sys = require "luci.sys"
+ut = require "luci.util"
+arg[1] = arg[1] or ""
+
+metricValue = ""
+metricList = ""
+errorDuplicateMetricList = ""
+errorNoMetric = 0
+errorDuplicateMetric = 0
+errorRoute = 0
+errorNetConfig = 0
+errorReliability = 0
+interfaceCheck()
+
+
+m5 = Map("mwan3", translatef("MWAN Interface Configuration - %s", arg[1]),
+       interfaceWarnings())
+       m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "interface")
+
+
+mwan_interface = m5:section(NamedSection, arg[1], "interface", "")
+       mwan_interface.addremove = false
+       mwan_interface.dynamic = false
+
+
+enabled = mwan_interface:option(ListValue, "enabled", translate("Enabled"))
+       enabled.default = "1"
+       enabled:value("1", translate("Yes"))
+       enabled:value("0", translate("No"))
+
+initial_state = mwan_interface:option(ListValue, "initial_state", translate("Initial state"),
+       translate("Expect interface state on up event"))
+       initial_state.default = "online"
+       initial_state:value("online", translate("Online"))
+       initial_state:value("offline", translate("Offline"))
+
+family = mwan_interface:option(ListValue, "family", translate("Internet Protocol"))
+       family.default = "ipv4"
+       family:value("ipv4", translate("IPv4"))
+       family:value("ipv6", translate("IPv6"))
+
+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"
+
+track_method = mwan_interface:option(ListValue, "track_method", translate("Tracking method"))
+       track_method.default = "ping"
+       track_method:value("ping")
+       track_method:value("arping")
+       track_method:value("httping")
+
+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"))
+       reliability.datatype = "range(1, 100)"
+       reliability.default = "1"
+
+count = mwan_interface:option(ListValue, "count", translate("Ping count"))
+       count.default = "1"
+       count:value("1")
+       count:value("2")
+       count:value("3")
+       count:value("4")
+       count:value("5")
+
+size = mwan_interface:option(Value, "size", translate("Ping size"))
+       size.default = "56"
+       size:value("8")
+       size:value("24")
+       size:value("56")
+       size:value("120")
+       size:value("248")
+       size:value("504")
+       size:value("1016")
+       size:value("1472")
+       size:value("2040")
+       size.datatype = "range(1, 65507)"
+       size.rmempty = false
+       size.optional = false
+
+timeout = mwan_interface:option(ListValue, "timeout", translate("Ping timeout"))
+       timeout.default = "2"
+       timeout:value("1", translatef("%d second", 1))
+       timeout:value("2", translatef("%d seconds", 2))
+       timeout:value("3", translatef("%d seconds", 3))
+       timeout:value("4", translatef("%d seconds", 4))
+       timeout:value("5", translatef("%d seconds", 5))
+       timeout:value("6", translatef("%d seconds", 6))
+       timeout:value("7", translatef("%d seconds", 7))
+       timeout:value("8", translatef("%d seconds", 8))
+       timeout:value("9", translatef("%d seconds", 9))
+       timeout:value("10", translatef("%d seconds", 10))
+
+interval = mwan_interface:option(ListValue, "interval", translate("Ping interval"))
+       interval.default = "5"
+       interval:value("1", translatef("%d second", 1))
+       interval:value("3", translatef("%d seconds", 3))
+       interval:value("5", translatef("%d seconds", 5))
+       interval:value("10", translatef("%d seconds", 10))
+       interval:value("20", translatef("%d seconds", 20))
+       interval:value("30", translatef("%d seconds", 30))
+       interval:value("60", translatef("%d minute", 1))
+       interval:value("300", translatef("%d minutes", 5))
+       interval:value("600", translatef("%d minutes", 10))
+       interval:value("900", translatef("%d minutes", 15))
+       interval:value("1800", translatef("%d minutes", 30))
+       interval:value("3600", translatef("%d hour", 1))
+
+failure = mwan_interface:option(Value, "failure_interval", translate("Failure interval"),
+       translate("Ping interval during failure detection"))
+       failure.default = "5"
+       failure:value("1", translatef("%d second", 1))
+       failure:value("3", translatef("%d seconds", 3))
+       failure:value("5", translatef("%d seconds", 5))
+       failure:value("10", translatef("%d seconds", 10))
+       failure:value("20", translatef("%d seconds", 20))
+       failure:value("30", translatef("%d seconds", 30))
+       failure:value("60", translatef("%d minute", 1))
+       failure:value("300", translatef("%d minutes", 5))
+       failure:value("600", translatef("%d minutes", 10))
+       failure:value("900", translatef("%d minutes", 15))
+       failure:value("1800", translatef("%d minutes", 30))
+       failure:value("3600", translatef("%d hour", 1))
+
+keep_failure = mwan_interface:option(Flag, "keep_failure_interval", translate("Keep failure interval"),
+       translate("Keep ping failure interval during failure state"))
+       keep_failure.default = keep_failure.disabled
+
+recovery = mwan_interface:option(Value, "recovery_interval", translate("Recovery interval"),
+       translate("Ping interval during failure recovering"))
+       recovery.default = "5"
+       recovery:value("1", translatef("%d second", 1))
+       recovery:value("3", translatef("%d seconds", 3))
+       recovery:value("5", translatef("%d seconds", 5))
+       recovery:value("10", translatef("%d seconds", 10))
+       recovery:value("20", translatef("%d seconds", 20))
+       recovery:value("30", translatef("%d seconds", 30))
+       recovery:value("60", translatef("%d minute", 1))
+       recovery:value("300", translatef("%d minutes", 5))
+       recovery:value("600", translatef("%d minutes", 10))
+       recovery:value("900", translatef("%d minutes", 15))
+       recovery:value("1800", translatef("%d minutes", 30))
+       recovery:value("3600", translatef("%d hour", 1))
+
+down = mwan_interface:option(ListValue, "down", translate("Interface down"),
+       translate("Interface will be deemed down after this many failed ping tests"))
+       down.default = "3"
+       down:value("1")
+       down:value("2")
+       down:value("3")
+       down:value("4")
+       down:value("5")
+       down:value("6")
+       down:value("7")
+       down:value("8")
+       down:value("9")
+       down:value("10")
+
+up = mwan_interface:option(ListValue, "up", translate("Interface up"),
+       translate("Downed interface will be deemed up after this many successful ping tests"))
+       up.default = "3"
+       up:value("1")
+       up:value("2")
+       up:value("3")
+       up:value("4")
+       up:value("5")
+       up:value("6")
+       up:value("7")
+       up:value("8")
+       up:value("9")
+       up:value("10")
+
+flush = mwan_interface:option(ListValue, "flush_conntrack", translate("Flush conntrack table"),
+       translate("Flush global firewall conntrack table on interface events"))
+       flush.default = "never"
+       flush:value("ifup", translate("ifup"))
+       flush:value("ifdown", translate("ifdown"))
+       flush:value("never", translate("never"))
+       flush:value("always", translate("always"))
+
+metric = mwan_interface:option(DummyValue, "metric", translate("Metric"),
+       translate("This displays the metric assigned to this interface in /etc/config/network"))
+       metric.rawhtml = true
+       function metric.cfgvalue(self, s)
+               if errorNoMetric == 0 then
+                       return metricValue
+               else
+                       return "&#8212;"
+               end
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/member.lua
new file mode 100644 (file)
index 0000000..efbe8f7
--- /dev/null
@@ -0,0 +1,46 @@
+-- ------ member configuration ------ --
+
+ds = require "luci.dispatcher"
+
+
+m5 = Map("mwan3", translate("MWAN Member Configuration"))
+       m5:append(Template("mwan/config_css"))
+
+
+mwan_member = m5:section(TypedSection, "member", translate("Members"),
+       translate("Members are profiles attaching a metric and weight to an MWAN interface<br />" ..
+       "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"))
+       mwan_member.addremove = true
+       mwan_member.dynamic = false
+       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")
+       function mwan_member.create(self, section)
+               TypedSection.create(self, section)
+               m5.uci:save("mwan3")
+               luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "member", section))
+       end
+
+
+interface = mwan_member:option(DummyValue, "interface", translate("Interface"))
+       interface.rawhtml = true
+       function interface.cfgvalue(self, s)
+               return self.map:get(s, "interface") or "&#8212;"
+       end
+
+metric = mwan_member:option(DummyValue, "metric", translate("Metric"))
+       metric.rawhtml = true
+       function metric.cfgvalue(self, s)
+               return self.map:get(s, "metric") or "1"
+       end
+
+weight = mwan_member:option(DummyValue, "weight", translate("Weight"))
+       weight.rawhtml = true
+       function weight.cfgvalue(self, s)
+               return self.map:get(s, "weight") or "1"
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/memberconfig.lua
new file mode 100644 (file)
index 0000000..eb6f417
--- /dev/null
@@ -0,0 +1,47 @@
+-- ------ extra functions ------ --
+
+function cbi_add_interface(field)
+       uci.cursor():foreach("mwan3", "interface",
+               function (section)
+                       field:value(section[".name"])
+               end
+       )
+end
+
+-- ------ member configuration ------ --
+
+dsp = require "luci.dispatcher"
+arg[1] = arg[1] or ""
+
+
+m5 = Map("mwan3", translatef("MWAN Member Configuration - %s", arg[1]))
+       m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "member")
+
+
+mwan_member = m5:section(NamedSection, arg[1], "member", "")
+       mwan_member.addremove = false
+       mwan_member.dynamic = false
+
+
+interface = mwan_member:option(Value, "interface", translate("Interface"))
+       cbi_add_interface(interface)
+
+metric = mwan_member:option(Value, "metric", translate("Metric"),
+       translate("Acceptable values: 1-1000. Defaults to 1 if not set"))
+       metric.datatype = "range(1, 1000)"
+
+weight = mwan_member:option(Value, "weight", translate("Weight"),
+       translate("Acceptable values: 1-1000. Defaults to 1 if not set"))
+       weight.datatype = "range(1, 1000)"
+
+
+-- ------ currently configured interfaces ------ --
+
+mwan_interface = m5:section(TypedSection, "interface", translate("Currently Configured Interfaces"))
+       mwan_interface.addremove = false
+       mwan_interface.dynamic = false
+       mwan_interface.sortable = false
+       mwan_interface.template = "cbi/tblsection"
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policy.lua
new file mode 100644 (file)
index 0000000..6640564
--- /dev/null
@@ -0,0 +1,94 @@
+-- ------ extra functions ------ --
+
+function policyCheck() -- check to see if any policy names exceed the maximum of 15 characters
+       uci.cursor():foreach("mwan3", "policy",
+               function (section)
+                       if string.len(section[".name"]) > 15 then
+                               nameTooLong = 1
+                               err_name_list = err_name_list .. section[".name"] .. " "
+                       end
+               end
+       )
+end
+
+function policyWarn() -- display status and warning messages at the top of the page
+       if nameTooLong == 1 then
+               return "<font color=\"ff0000\"><strong>" .. translate("WARNING: Some policies have names exceeding the maximum of 15 characters!") .. "</strong></font>"
+       else
+               return ""
+       end
+end
+
+-- ------ policy configuration ------ --
+
+ds = require "luci.dispatcher"
+sys = require "luci.sys"
+
+nameTooLong = 0
+err_name_list = " "
+policyCheck()
+
+
+m5 = Map("mwan3", translate("MWAN Policy Configuration"),
+       policyWarn())
+       m5:append(Template("mwan/config_css"))
+
+
+mwan_policy = m5:section(TypedSection, "policy", translate("Policies"),
+       translate("Policies are profiles grouping one or more members controlling how MWAN distributes traffic<br />" ..
+       "Member interfaces with lower metrics are used first. Interfaces with the same metric load-balance<br />" ..
+       "Load-balanced member interfaces distribute more traffic out those with higher weights<br />" ..
+       "Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be 15 characters or less<br />" ..
+       "Policies may not share the same name as configured interfaces, members or rules"))
+       mwan_policy.addremove = true
+       mwan_policy.dynamic = false
+       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")
+       function mwan_policy.create(self, section)
+               TypedSection.create(self, section)
+               m5.uci:save("mwan3")
+               luci.http.redirect(ds.build_url("admin", "network", "mwan", "configuration", "policy", section))
+       end
+
+
+use_member = mwan_policy:option(DummyValue, "use_member", translate("Members assigned"))
+       use_member.rawhtml = true
+       function use_member.cfgvalue(self, s)
+               local memberConfig, memberList = self.map:get(s, "use_member"), ""
+               if memberConfig then
+                       for k,v in pairs(memberConfig) do
+                               memberList = memberList .. v .. "<br />"
+                       end
+                       return memberList
+               else
+                       return "&#8212;"
+               end
+       end
+
+last_resort = mwan_policy:option(DummyValue, "last_resort", translate("Last resort"))
+       last_resort.rawhtml = true
+       function last_resort.cfgvalue(self, s)
+               local action = self.map:get(s, "last_resort")
+               if action == "blackhole" then
+                       return translate("blackhole (drop)")
+               elseif action == "default" then
+                       return translate("default (use main routing table)")
+               else
+                       return translate("unreachable (reject)")
+               end
+       end
+
+errors = mwan_policy:option(DummyValue, "errors", translate("Errors"))
+       errors.rawhtml = true
+       function errors.cfgvalue(self, s)
+               if not string.find(err_name_list, " " .. s .. " ") then
+                       return ""
+               else
+                       return "<span title=\"Name exceeds 15 characters\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>"
+               end
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/policyconfig.lua
new file mode 100644 (file)
index 0000000..feb62dc
--- /dev/null
@@ -0,0 +1,65 @@
+-- ------ extra functions ------ --
+
+function policyCheck() -- check to see if this policy's name exceed the maximum of 15 characters
+       policyNameLength = string.len(arg[1])
+       if policyNameLength > 15 then
+               nameTooLong = 1
+       end
+end
+
+function policyWarn() -- display status and warning messages at the top of the page
+       if nameTooLong == 1 then
+               return "<font color=\"ff0000\"><strong>" .. translatef("WARNING: This policy's name is %d characters exceeding the maximum of 15!", policyNameLength) .. "</strong></font>"
+       else
+               return ""
+       end
+end
+
+function cbiAddMember(field)
+       uci.cursor():foreach("mwan3", "member",
+               function (section)
+                       field:value(section[".name"])
+               end
+       )
+end
+
+-- ------ policy configuration ------ --
+
+dsp = require "luci.dispatcher"
+arg[1] = arg[1] or ""
+
+nameTooLong = 0
+policyCheck()
+
+
+m5 = Map("mwan3", translatef("MWAN Policy Configuration - %s", arg[1]),
+       policyWarn())
+       m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "policy")
+
+
+mwan_policy = m5:section(NamedSection, arg[1], "policy", "")
+       mwan_policy.addremove = false
+       mwan_policy.dynamic = false
+
+
+use_member = mwan_policy:option(DynamicList, "use_member", translate("Member used"))
+       cbiAddMember(use_member)
+
+last_resort = mwan_policy:option(ListValue, "last_resort", translate("Last resort"),
+       translate("When all policy members are offline use this behavior for matched traffic"))
+       last_resort.default = "unreachable"
+       last_resort:value("unreachable", translate("unreachable (reject)"))
+       last_resort:value("blackhole", translate("blackhole (drop)"))
+       last_resort:value("default", translate("default (use main routing table)"))
+
+
+-- ------ currently configured members ------ --
+
+mwan_member = m5:section(TypedSection, "member", translate("Currently Configured Members"))
+       mwan_member.addremove = false
+       mwan_member.dynamic = false
+       mwan_member.sortable = false
+       mwan_member.template = "cbi/tblsection"
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/rule.lua
new file mode 100644 (file)
index 0000000..9cb4756
--- /dev/null
@@ -0,0 +1,141 @@
+-- ------ extra functions ------ --
+
+function ruleCheck() -- determine if rules needs a proper protocol configured
+       uci.cursor():foreach("mwan3", "rule",
+               function (section)
+                       local sourcePort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".src_port"))
+                       local destPort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".dest_port"))
+                       if sourcePort ~= "" or destPort ~= "" then -- ports configured
+                               local protocol = ut.trim(sys.exec("uci -p /var/state get mwan3." .. section[".name"] .. ".proto"))
+                               if protocol == "" or protocol == "all" then -- no or improper protocol
+                                       error_protocol_list = error_protocol_list .. section[".name"] .. " "
+                               end
+                       end
+               end
+       )
+end
+
+function ruleWarn() -- display warning messages at the top of the page
+       if error_protocol_list ~= " " then
+               return "<font color=\"ff0000\"><strong>" .. translate("WARNING: Some rules have a port configured with no or improper protocol specified! Please configure a specific protocol!") .. "</strong></font>"
+       else
+               return ""
+       end
+end
+
+-- ------ rule configuration ------ --
+
+dsp = require "luci.dispatcher"
+sys = require "luci.sys"
+ut = require "luci.util"
+
+error_protocol_list = " "
+ruleCheck()
+
+
+m5 = Map("mwan3", translate("MWAN Rule Configuration"),
+       ruleWarn())
+       m5:append(Template("mwan/config_css"))
+
+
+mwan_rule = m5:section(TypedSection, "rule", translate("Traffic Rules"),
+       translate("Rules specify which traffic will use a particular MWAN policy based on IP address, port or protocol<br />" ..
+       "Rules are matched from top to bottom. Rules below a matching rule are ignored. Traffic not matching any rule is routed using the main routing table<br />" ..
+       "Traffic destined for known (other than default) networks is handled by the main routing table. Traffic matching a rule, but all WAN interfaces for that policy are down will be blackholed<br />" ..
+       "Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />" ..
+       "Rules may not share the same name as configured interfaces, members or policies"))
+       mwan_rule.addremove = true
+       mwan_rule.anonymous = false
+       mwan_rule.dynamic = false
+       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")
+       function mwan_rule.create(self, section)
+               TypedSection.create(self, section)
+               m5.uci:save("mwan3")
+               luci.http.redirect(dsp.build_url("admin", "network", "mwan", "configuration", "rule", section))
+       end
+
+
+src_ip = mwan_rule:option(DummyValue, "src_ip", translate("Source address"))
+       src_ip.rawhtml = true
+       function src_ip.cfgvalue(self, s)
+               return self.map:get(s, "src_ip") or "&#8212;"
+       end
+
+src_port = mwan_rule:option(DummyValue, "src_port", translate("Source port"))
+       src_port.rawhtml = true
+       function src_port.cfgvalue(self, s)
+               return self.map:get(s, "src_port") or "&#8212;"
+       end
+
+dest_ip = mwan_rule:option(DummyValue, "dest_ip", translate("Destination address"))
+       dest_ip.rawhtml = true
+       function dest_ip.cfgvalue(self, s)
+               return self.map:get(s, "dest_ip") or "&#8212;"
+       end
+
+dest_port = mwan_rule:option(DummyValue, "dest_port", translate("Destination port"))
+       dest_port.rawhtml = true
+       function dest_port.cfgvalue(self, s)
+               return self.map:get(s, "dest_port") or "&#8212;"
+       end
+
+proto = mwan_rule:option(DummyValue, "proto", translate("Protocol"))
+       proto.rawhtml = true
+       function proto.cfgvalue(self, s)
+               return self.map:get(s, "proto") or "all"
+       end
+
+sticky = mwan_rule:option(DummyValue, "sticky", translate("Sticky"))
+       sticky.rawhtml = true
+       function sticky.cfgvalue(self, s)
+               if self.map:get(s, "sticky") == "1" then
+                       stickied = 1
+                       return translate("Yes")
+               else
+                       stickied = nil
+                       return translate("No")
+               end
+       end
+
+timeout = mwan_rule:option(DummyValue, "timeout", translate("Sticky timeout"))
+       timeout.rawhtml = true
+       function timeout.cfgvalue(self, s)
+               if stickied then
+                       local timeoutValue = self.map:get(s, "timeout")
+                       if timeoutValue then
+                               return timeoutValue .. "s"
+                       else
+                               return "600s"
+                       end
+               else
+                       return "&#8212;"
+               end
+       end
+
+ipset = mwan_rule:option(DummyValue, "ipset", translate("IPset"))
+       ipset.rawhtml = true
+       function ipset.cfgvalue(self, s)
+               return self.map:get(s, "ipset") or "&#8212;"
+       end
+
+use_policy = mwan_rule:option(DummyValue, "use_policy", translate("Policy assigned"))
+       use_policy.rawhtml = true
+       function use_policy.cfgvalue(self, s)
+               return self.map:get(s, "use_policy") or "&#8212;"
+       end
+
+errors = mwan_rule:option(DummyValue, "errors", translate("Errors"))
+       errors.rawhtml = true
+       function errors.cfgvalue(self, s)
+               if not string.find(error_protocol_list, " " .. s .. " ") then
+                       return ""
+               else
+                       return "<span title=\"" .. translate("No protocol specified") .. "\"><img src=\"/luci-static/resources/cbi/reset.gif\" alt=\"error\"></img></span>"
+               end
+       end
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua b/applications/luci-app-mwan3/luasrc/model/cbi/mwan/ruleconfig.lua
new file mode 100644 (file)
index 0000000..cb1b45d
--- /dev/null
@@ -0,0 +1,113 @@
+-- ------ extra functions ------ --
+
+function ruleCheck() -- determine if rule needs a protocol specified
+       local sourcePort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".src_port"))
+       local destPort = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".dest_port"))
+       if sourcePort ~= "" or destPort ~= "" then -- ports configured
+               local protocol = ut.trim(sys.exec("uci -p /var/state get mwan3." .. arg[1] .. ".proto"))
+               if protocol == "" or protocol == "all" then -- no or improper protocol
+                       error_protocol = 1
+               end
+       end
+end
+
+function ruleWarn() -- display warning message at the top of the page
+       if error_protocol == 1 then
+               return "<font color=\"ff0000\"><strong>" .. translate("WARNING: This rule is incorrectly configured with no or improper protocol specified! Please configure a specific protocol!") .. "</strong></font>"
+       else
+               return ""
+       end
+end
+
+function cbiAddPolicy(field)
+       uci.cursor():foreach("mwan3", "policy",
+               function (section)
+                       field:value(section[".name"])
+               end
+       )
+end
+
+function cbiAddProtocol(field)
+       local protocols = ut.trim(sys.exec("cat /etc/protocols | grep ' # ' | awk '{print $1}' | grep -vw -e 'ip' -e 'tcp' -e 'udp' -e 'icmp' -e 'esp' | grep -v 'ipv6' | sort | tr '\n' ' '"))
+       for p in string.gmatch(protocols, "%S+") do
+               field:value(p)
+       end
+end
+
+-- ------ rule configuration ------ --
+
+dsp = require "luci.dispatcher"
+sys = require "luci.sys"
+ut = require "luci.util"
+arg[1] = arg[1] or ""
+
+error_protocol = 0
+ruleCheck()
+
+
+m5 = Map("mwan3", translatef("MWAN Rule Configuration - %s", arg[1]),
+       ruleWarn())
+       m5.redirect = dsp.build_url("admin", "network", "mwan", "configuration", "rule")
+
+
+mwan_rule = m5:section(NamedSection, arg[1], "rule", "")
+       mwan_rule.addremove = false
+       mwan_rule.dynamic = false
+
+
+src_ip = mwan_rule:option(Value, "src_ip", translate("Source address"),
+       translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"))
+       src_ip.datatype = ipaddr
+
+src_port = mwan_rule:option(Value, "src_port", translate("Source port"),
+       translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes"))
+
+dest_ip = mwan_rule:option(Value, "dest_ip", translate("Destination address"),
+       translate("Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"))
+       dest_ip.datatype = ipaddr
+
+dest_port = mwan_rule:option(Value, "dest_port", translate("Destination port"),
+       translate("May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes"))
+
+proto = mwan_rule:option(Value, "proto", translate("Protocol"),
+       translate("View the contents of /etc/protocols for protocol descriptions"))
+       proto.default = "all"
+       proto.rmempty = false
+       proto:value("all")
+       proto:value("ip")
+       proto:value("tcp")
+       proto:value("udp")
+       proto:value("icmp")
+       proto:value("esp")
+       cbiAddProtocol(proto)
+
+sticky = mwan_rule:option(ListValue, "sticky", translate("Sticky"),
+       translate("Traffic from the same source IP address that previously matched this rule within the sticky timeout period will use the same WAN interface"))
+       sticky.default = "0"
+       sticky:value("1", translate("Yes"))
+       sticky:value("0", translate("No"))
+
+timeout = mwan_rule:option(Value, "timeout", translate("Sticky timeout"),
+       translate("Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"))
+       timeout.datatype = "range(1, 1000000)"
+
+ipset = mwan_rule:option(Value, "ipset", translate("IPset"),
+       translate("Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/youtube.com/youtube\")"))
+
+use_policy = mwan_rule:option(Value, "use_policy", translate("Policy assigned"))
+       cbiAddPolicy(use_policy)
+       use_policy:value("unreachable", translate("unreachable (reject)"))
+       use_policy:value("blackhole", translate("blackhole (drop)"))
+       use_policy:value("default", translate("default (use main routing table)"))
+
+
+-- ------ currently configured policies ------ --
+
+mwan_policy = m5:section(TypedSection, "policy", translate("Currently Configured Policies"))
+       mwan_policy.addremove = false
+       mwan_policy.dynamic = false
+       mwan_policy.sortable = false
+       mwan_policy.template = "cbi/tblsection"
+
+
+return m5
diff --git a/applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm b/applications/luci-app-mwan3/luasrc/view/admin_status/index/mwan.htm
new file mode 100644 (file)
index 0000000..53b997a
--- /dev/null
@@ -0,0 +1 @@
+<%+mwan/openwrt_overview_status%>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_diagnostics.htm
new file mode 100644 (file)
index 0000000..4483485
--- /dev/null
@@ -0,0 +1,115 @@
+<%+header%>
+
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<%
+       local uci = require "luci.model.uci"
+
+       interfaceNames = ""
+       uci.cursor():foreach("mwan3", "interface",
+               function (section)
+                       interfaceNames = interfaceNames .. section[".name"] .. " "
+               end
+       )
+%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+       var stxhr = new XHR();
+
+       function update_status(tool, task, task_name)
+       {
+               var iface = document.getElementById('mwaniface').value;
+               var output = document.getElementById('diag_output');
+
+               if (tool == "service")
+                       {
+                               output.innerHTML =
+                                       '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
+                                       String.format("<%:Waiting for MWAN to %s...%>", task_name)
+                               ;
+                       }
+                       else
+                       {
+                               output.innerHTML =
+                                       '<img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="padding: 20px; vertical-align: middle;" /> ' +
+                                       "<%:Waiting for diagnostic results...%>"
+                               ;
+                       }
+
+               output.parentNode.style.display = 'block';
+               output.style.display = 'inline';
+
+               stxhr.get('<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced")%>/diagnostics_display' + '/' + iface + '/' + tool + '/' + task, null,
+                       function(x, mArray)
+                       {
+                               if (mArray.diagnostics)
+                               {
+                                       output.innerHTML = String.format('<pre id="diag_output_css">%h</pre>', mArray.diagnostics[0]);
+                               }
+                               else
+                               {
+                                       output.innerHTML = '<pre id="diag_output_css"><strong><%:No diagnostic results returned%></strong></pre>';
+                               }
+                       }
+               );
+       }
+//]]></script>
+
+<div id="mwan_diagnostics" class="cbi-map">
+       <fieldset id="diag_select" class="cbi-section">
+               <legend><%:MWAN Interface Diagnostics%></legend>
+               <select id="mwaniface">
+                       <% for z in interfaceNames:gmatch("[^ ]+") do -%><option value="<%=z%>"><%=z%></option><%- end %>
+               </select>
+               <div id="buttoncss">
+                       <input type="button" value="<%:Ping default gateway%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'gateway', null)" />
+                       <input type="button" value="<%:Ping tracking IP%>" class="cbi-button cbi-button-apply" onclick="update_status('ping', 'track_ip', null)" />
+                       <input type="button" value="<%:Check IP rules%>" class="cbi-button cbi-button-apply" onclick="update_status('rulechk', null, null)" />
+                       <input type="button" value="<%:Check routing table%>" class="cbi-button cbi-button-apply" onclick="update_status('routechk', null, null)" />
+                       <input type="button" value="<%:Hotplug ifup%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifup', null)" />
+                       <input type="button" value="<%:Hotplug ifdown%>" class="cbi-button cbi-button-apply" onclick="update_status('hotplug', 'ifdown', null)" />
+               </div>
+       </fieldset>
+       <fieldset id="diag_select" class="cbi-section">
+               <legend><%:MWAN Service Control%></legend>
+               <div id="buttoncss">
+                       <input type="button" value="<%:Restart MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'restart', '<%:restart%>')" />
+                       <input type="button" value="<%:Stop MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'stop', '<%:stop%>')" />
+                       <input type="button" value="<%:Start MWAN%>" class="cbi-button cbi-button-apply" onclick="update_status('service', 'start', '<%:start%>')" />
+               </div>
+       </fieldset>
+       <fieldset class="cbi-section" style="display:none">
+               <legend><%:Diagnostic Results%></legend>
+               <div id="diag_output"></div>
+       </fieldset>
+</div>
+
+<style type="text/css">
+  #mwaniface {
+       float: left;
+       margin: 8px 20px 0px 0px;
+  }
+  #buttoncss {
+       display: table;
+       float: left;
+       text-align: left;
+  }
+  .cbi-button {
+       margin: 8px 20px 0px 0px;
+       min-width: 153px;
+  }
+  #diag_output_css {
+       padding: 20px;
+       text-align: left;
+  }
+</style>
+
+<%+footer%>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_hotplugscript.htm
new file mode 100644 (file)
index 0000000..10b4f10
--- /dev/null
@@ -0,0 +1,14 @@
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<style type="text/css">
+  .cbi-section {
+       padding: 20px;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_mwanconfig.htm
new file mode 100644 (file)
index 0000000..20ae603
--- /dev/null
@@ -0,0 +1,14 @@
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<style type="text/css">
+  .cbi-section {
+       padding: 20px;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_networkconfig.htm
new file mode 100644 (file)
index 0000000..bed4310
--- /dev/null
@@ -0,0 +1,14 @@
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<style type="text/css">
+  .cbi-section {
+       padding: 20px;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_troubleshooting.htm
new file mode 100644 (file)
index 0000000..4174ef4
--- /dev/null
@@ -0,0 +1,63 @@
+<%+header%>
+
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+       XHR.poll(15, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "advanced", "troubleshooting_display")%>', null,
+               function(x, mArray)
+               {
+                       var tshoot = document.getElementById('troubleshoot_text');
+                       if (mArray.versions)
+                       {
+                               var versions = '<span class="description">Software versions : </span><br /><br />';
+                               var mwanConfig = '<br /><br /><span class="description">Output of &#34;cat /etc/config/mwan3&#34; : </span><br /><br />';
+                               var netConfig = '<br /><br /><span class="description">Output of &#34;cat /etc/config/network&#34; : </span><br /><br />';
+                               var wifiConfig = '<br /><br /><span class="description">Output of &#34;cat /etc/config/wireless&#34; : </span><br /><br />';
+                               var ifconfig = '<br /><br /><span class="description">Output of &#34;ifconfig&#34; : </span><br /><br />';
+                               var ipRoute = '<br /><br /><span class="description">Output of &#34;route -n&#34; : </span><br /><br />';
+                               var ipRuleShow = '<br /><br /><span class="description">Output of &#34;ip rule show&#34; : </span><br /><br />';
+                               var routeListTable = '<br /><br /><span class="description">Output of &#34;ip route list table 1-250&#34; : </span><br /><br />';
+                               var firewallOut = '<br /><br /><span class="description">Firewall default output policy (must be ACCEPT) : </span><br /><br />';
+                               var iptables = '<br /><br /><span class="description">Output of &#34;iptables -L -t mangle -v -n&#34; : </span><br /><br />';
+                               tshoot.innerHTML = String.format(
+                                       '<pre>%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s</pre>',
+                                       versions, mArray.versions[0], mwanConfig, mArray.mwanconfig[0], netConfig, mArray.netconfig[0],
+                                       wifiConfig, mArray.wificonfig[0], ifconfig, mArray.ifconfig[0], ipRoute, mArray.routeshow[0],
+                                       ipRuleShow, mArray.iprule[0], routeListTable, mArray.routelist[0], firewallOut, mArray.firewallout[0],
+                                       iptables, mArray.iptables[0]
+                               );
+                       }
+                       else
+                       {
+                               tshoot.innerHTML = '<strong><%:Error collecting troubleshooting information%></strong>';
+                       }
+               }
+       );
+//]]></script>
+
+<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>
+       </fieldset>
+</div>
+
+<style type="text/css">
+  #troubleshoot_text {
+       padding: 20px;
+       text-align: left;
+  }
+  .description {
+       background-color: rgb(78, 186, 241);
+  }
+</style>
+
+<%+footer%>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm b/applications/luci-app-mwan3/luasrc/view/mwan/advanced_wirelessconfig.htm
new file mode 100644 (file)
index 0000000..bb18d53
--- /dev/null
@@ -0,0 +1,14 @@
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/hotplugscript")%>"><%:Hotplug Script%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/mwanconfig")%>"><%:MWAN Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/networkconfig")%>"><%:Network Config%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/wirelessconfig")%>"><%:Wireless Config%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/diagnostics")%>"><%:Diagnostics%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/advanced/troubleshooting")%>"><%:Troubleshooting%></a></li>
+</ul>
+
+<style type="text/css">
+  .cbi-section {
+       padding: 20px;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm b/applications/luci-app-mwan3/luasrc/view/mwan/config_css.htm
new file mode 100644 (file)
index 0000000..5d91c53
--- /dev/null
@@ -0,0 +1,28 @@
+<style type="text/css">
+  table td {   /* cells showing the configuration values */
+       padding: 0px;
+       text-align: center;
+       vertical-align: middle;
+  }
+  table th {   /* column for configuration section name */
+       padding: 0px;
+       text-align: center;
+       vertical-align: middle;
+  }
+  table tbody th {     /* column for configuration section name */
+       padding: 0px;
+       vertical-align: middle;
+  }
+  .cbi-section-node table div {        /* rows */
+       padding-top: 5px;
+  }
+  table.cbi-section-table td.cbi-section-table-cell {  /* sort buttons column */
+       text-align: center;
+  }
+  .cbi-section h3 {
+       color: rgb(85, 85, 85);
+       font-family: Trebuchet MS,Verdana,sans-serif;
+       font-style: italic;
+       font-weight: normal;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm b/applications/luci-app-mwan3/luasrc/view/mwan/openwrt_overview_status.htm
new file mode 100644 (file)
index 0000000..7cef063
--- /dev/null
@@ -0,0 +1,80 @@
+<script type="text/javascript">//<![CDATA[
+       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null,
+               function(x, mArray)
+               {
+                       var status = document.getElementById('mwan_status_text');
+                       if (mArray.wans)
+                       {
+                               var temp = '';
+                               for ( var i = 0; i < mArray.wans.length; i++ )
+                               {
+                                       var stat = '';
+                                       var cssc = '';
+                                       switch (mArray.wans[i].status)
+                                       {
+                                               case 'online':
+                                                       stat = '<%:Online (tracking active)%>';
+                                                       cssc = 'wanon';
+                                                       break;
+                                               case 'notMonitored':
+                                                       stat = '<%:Online (tracking off)%>';
+                                                       cssc = 'wanon';
+                                                       break;
+                                               case 'offline':
+                                                       stat = '<%:Offline%>';
+                                                       cssc = 'wanoff';
+                                                       break;
+                                               case 'notEnabled':
+                                                       stat = '<%:Disabled%>';
+                                                       cssc = 'wanoff';
+                                                       break;
+                                       }
+                                       temp += String.format(
+                                               '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>',
+                                               cssc, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, stat
+                                       );
+                               }
+                               status.innerHTML = temp;
+                       }
+                       else
+                       {
+                               status.innerHTML = '<strong><%:No MWAN interfaces found%></strong>';
+                       }
+               }
+       );
+//]]></script>
+
+<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>
+</fieldset>
+
+<style type="text/css">
+  .container { /* container for entire page. fixes bootstrap theme's ridiculously small page width */
+       max-width: 1044px;
+  }
+  #mwan_status_text {
+       display: table;
+       font-size: 14px;
+       margin: auto;
+       max-width: 1044px;
+       min-width: 246px;
+       width: 100%;
+  }
+  .wanon {
+       background-color: rgb(144, 240, 144);
+  }
+  .wanoff {
+       background-color: rgb(240, 144, 144);
+  }
+  .wanon, .wanoff {
+       border-radius: 60px;
+       box-shadow: 0px 2px 5px -3px;
+       float: left;
+       margin: 8px 3px 0px 3px;
+       min-height: 30px;
+       min-width: 235px;
+       padding: 5px 10px 8px 10px;
+       text-align: center;
+  }
+</style>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_detailed.htm
new file mode 100644 (file)
index 0000000..6a800c3
--- /dev/null
@@ -0,0 +1,40 @@
+<%+header%>
+
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li>
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "detailed_status")%>', null,
+               function(x, mArray)
+               {
+                       var status = document.getElementById('mwan_detail_text');
+                       if (mArray.mwandetail)
+                       {
+                               status.innerHTML = String.format('<pre>%s</pre>', mArray.mwandetail[0]);
+                       }
+                       else
+                       {
+                               status.innerHTML = '<strong><%:No detailed status information available%></strong>';
+                       }
+               }
+       );
+//]]></script>
+
+<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>
+       </fieldset>
+</div>
+
+<style type="text/css">
+  #mwan_detail_text {
+       padding: 20px;
+       text-align: left;
+  }
+</style>
+
+<%+footer%>
diff --git a/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm b/applications/luci-app-mwan3/luasrc/view/mwan/overview_interface.htm
new file mode 100644 (file)
index 0000000..2929a6d
--- /dev/null
@@ -0,0 +1,108 @@
+<%+header%>
+
+<ul class="cbi-tabmenu">
+       <li class="cbi-tab"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview")%>"><%:Interface Status%></a></li>
+       <li class="cbi-tab-disabled"><a href="<%=luci.dispatcher.build_url("admin/network/mwan/overview/overview_detailed")%>"><%:Detailed Status%></a></li>
+</ul>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+       XHR.poll(5, '<%=luci.dispatcher.build_url("admin", "network", "mwan", "overview", "interface_status")%>', null,
+               function(x, mArray)
+               {
+                       var statusDiv = document.getElementById('mwan_status_text');
+                       if (mArray.wans)
+                       {
+                               var interfaceStatus = '';
+                               for ( var i = 0; i < mArray.wans.length; i++ )
+                               {
+                                       var status = '';
+                                       var css = '';
+                                       switch (mArray.wans[i].status)
+                                       {
+                                               case 'online':
+                                                       status = '<%:Online (tracking active)%>';
+                                                       css = 'wanon';
+                                                       break;
+                                               case 'notMonitored':
+                                                       status = '<%:Online (tracking off)%>';
+                                                       css = 'wanon';
+                                                       break;
+                                               case 'offline':
+                                                       status = '<%:Offline%>';
+                                                       css = 'wanoff';
+                                                       break;
+                                               case 'notEnabled':
+                                                       status = '<%:Disabled%>';
+                                                       css = 'wanoff';
+                                                       break;
+                                       }
+                                       interfaceStatus += String.format(
+                                               '<span class="%s"><strong>%s (<a href="%q">%s</a>)</strong><br />%s</span>',
+                                               css, mArray.wans[i].name, mArray.wans[i].link, mArray.wans[i].ifname, status
+                                       );
+                               }
+                               statusDiv.innerHTML = interfaceStatus;
+                       }
+                       else
+                       {
+                               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 :%>';
+                               logs.innerHTML = String.format('<pre>%s<br /><br />%s</pre>', mwanLog, mArray.mwanlog[0]);
+                       }
+                       else
+                       {
+                               logs.innerHTML = '<strong><%:No MWAN systemlog history found%></strong>';
+                       }
+               }
+       );
+//]]></script>
+
+<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>
+       </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>
+       </fieldset>
+</div>
+
+<style type="text/css">
+  #mwan_status_text {
+       display: table;
+       font-size: 14px;
+       margin: auto;
+       max-width: 1044px;
+       min-width: 246px;
+       width: 100%;
+  }
+  .wanon {
+       background-color: rgb(144, 240, 144);
+  }
+  .wanoff {
+       background-color: rgb(240, 144, 144);
+  }
+  .wanon, .wanoff {
+       border-radius: 60px;
+       box-shadow: 0px 2px 5px -3px;
+       float: left;
+       margin: 8px 3px 0px 3px;
+       min-height: 30px;
+       min-width: 235px;
+       padding: 5px 10px 8px 10px;
+       text-align: center;
+  }
+  #mwan_statuslog_text {
+       padding: 20px;
+       text-align: left;
+  }
+</style>
+
+<%+footer%>
diff --git a/applications/luci-app-mwan3/po/ja/mwan3.po b/applications/luci-app-mwan3/po/ja/mwan3.po
new file mode 100644 (file)
index 0000000..34a9f1f
--- /dev/null
@@ -0,0 +1,665 @@
+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 2.0.3\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "%d hour"
+msgstr "%d 時間"
+
+msgid "%d minute"
+msgstr "%d 分"
+
+msgid "%d minutes"
+msgstr "%d 分"
+
+msgid "%d second"
+msgstr "%d 秒"
+
+msgid "%d seconds"
+msgstr "%d 秒"
+
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"利用可能な値: 1-100。上記の追跡 IP の合計個数のうち、Up 状態と判定するために"
+"に必要な、レスポンスが返された追跡 IP アドレスの個数です。"
+
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "利用可能な値: 1-1000。空欄の場合のデフォルトは1です。"
+
+msgid "Advanced"
+msgstr "詳細設定"
+
+msgid "Check IP rules"
+msgstr "IP ルールのチェック"
+
+msgid "Check routing table"
+msgstr "ルーティング テーブルのチェック"
+
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
+msgid "Configuration"
+msgstr "設定"
+
+msgid "Currently Configured Interfaces"
+msgstr "設定済みインターフェース"
+
+msgid "Currently Configured Members"
+msgstr "設定済みメンバー"
+
+msgid "Currently Configured Policies"
+msgstr "設定済みポリシー"
+
+msgid "Destination address"
+msgstr "宛先アドレス"
+
+msgid "Destination port"
+msgstr "宛先ポート"
+
+msgid "Detailed Status"
+msgstr "詳細ステータス"
+
+msgid "Diagnostic Results"
+msgstr "診断結果"
+
+msgid "Diagnostics"
+msgstr "診断機能"
+
+msgid "Disabled"
+msgstr "無効"
+
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Down 状態のインターフェースが Up 状態と判断されるまでに要する ping テストの成"
+"功回数です。"
+
+msgid "Enabled"
+msgstr "有効"
+
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "<code>0x</code> で始まる16進数の値を入力してください。"
+
+msgid "Error collecting troubleshooting information"
+msgstr "トラブルシューティング情報の収集エラー"
+
+msgid "Errors"
+msgstr "エラー"
+
+msgid "Expect interface state on up event"
+msgstr "Up イベント時に予想されるインターフェースの状態です。"
+
+msgid "Failure interval"
+msgstr "障害検出 インターバル"
+
+msgid "Firewall mask"
+msgstr "ファイアウォール マスク"
+
+msgid "Flush conntrack table"
+msgstr ""
+
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+msgid "Globals"
+msgstr "全般"
+
+msgid "Globals mwan3 options"
+msgstr "MWAN3 全般オプション"
+
+msgid "Hotplug Script"
+msgstr "ホットプラグ スクリプト"
+
+msgid "Hotplug ifdown"
+msgstr "ホットプラグ ifdown"
+
+msgid "Hotplug ifup"
+msgstr "ホットプラグ ifup"
+
+msgid "IPset"
+msgstr "IPset"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Initial state"
+msgstr "初期状態"
+
+msgid "Interface"
+msgstr "インターフェース"
+
+msgid "Interface Status"
+msgstr "インターフェース ステータス"
+
+msgid "Interface down"
+msgstr "インターフェース Down"
+
+msgid "Interface up"
+msgstr "インターフェース Up"
+
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"インターフェースが Down 状態と判断されるまでに要する ping テストの失敗回数で"
+"す。"
+
+msgid "Interfaces"
+msgstr "インターフェース"
+
+msgid "Internet Protocol"
+msgstr "インターネット プロトコル"
+
+msgid "Keep failure interval"
+msgstr ""
+
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr "直近の MWAN システムログ(50行)です。一番上が最新の行です:"
+
+msgid "Last resort"
+msgstr "最終手段"
+
+msgid "Load Balancing"
+msgstr "負荷分散"
+
+msgid "Loading"
+msgstr "読込中"
+
+msgid "Local source interface"
+msgstr ""
+
+msgid "MWAN Config"
+msgstr "MWAN 設定"
+
+msgid "MWAN Detailed Status"
+msgstr "MWAN 詳細ステータス"
+
+msgid "MWAN Interface Configuration"
+msgstr "MWAN インターフェース設定"
+
+msgid "MWAN Interface Configuration - %s"
+msgstr "MWAN インターフェース設定 - %s"
+
+msgid "MWAN Interface Diagnostics"
+msgstr "MWAN インターフェース診断"
+
+msgid "MWAN Interface Live Status"
+msgstr "MWAN インターフェース Live ステータス"
+
+msgid "MWAN Interface Systemlog"
+msgstr "MWAN インターフェース システムログ"
+
+msgid "MWAN Member Configuration"
+msgstr "MWAN メンバー設定"
+
+msgid "MWAN Member Configuration - %s"
+msgstr "MWAN メンバー設定 - %s"
+
+msgid "MWAN Policy Configuration"
+msgstr "MWAN ポリシー設定"
+
+msgid "MWAN Policy Configuration - %s"
+msgstr "MWAN ポリシー設定 - %s"
+
+msgid "MWAN Rule Configuration"
+msgstr "MWAN ルール設定"
+
+msgid "MWAN Rule Configuration - %s"
+msgstr "MWAN ルール設定 - %s"
+
+msgid "MWAN Service Control"
+msgstr "MWAN サービス コントロール"
+
+msgid ""
+"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN "
+"requires that all interfaces have a unique metric configured in /etc/config/"
+"network<br />Names must match the interface name found in /etc/config/"
+"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, "
+"_ and no spaces<br />Interfaces may not share the same name as configured "
+"members, policies or rules"
+msgstr ""
+"MWAN は、250個までの物理または論理、あるいは両方のインターフェースをサポート"
+"します。<br />MWAN は、全てのインターフェースが /etc/config/network で設定さ"
+"れるユニークなメトリックを持つことを必要とします。<br />下記 \"インターフェー"
+"ス\" の名前は、 /etc/config/network に存在するインターフェース名と同じでなけ"
+"ればなりません(詳細設定タブを確認)。<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\")を、クオーテーション無しで指定することができます。"
+
+msgid "Member"
+msgstr "メンバー"
+
+msgid "Member used"
+msgstr "使用されるメンバー"
+
+msgid "Members"
+msgstr "メンバー"
+
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface<br /"
+">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 />名前は A-Z, a-z, 0-9, _ を含むことができますが、スペース"
+"は使用できません。<br />メンバーには、設定済みのインターフェースやポリシー、"
+"ルールと同じ名前を使用することはできません。"
+
+msgid "Members assigned"
+msgstr "アサイン済みメンバー"
+
+msgid "Metric"
+msgstr "メトリック"
+
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"IPset ルールの名前です。このルールは、 /etc/dnsmasq.conf で必要です。(例: "
+"\"ipset=/youtube.com/youtube\")"
+
+msgid "Network Config"
+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"
+msgstr "オンライン"
+
+msgid "Online (tracking active)"
+msgstr "オンライン(追跡実行中)"
+
+msgid "Online (tracking off)"
+msgstr "オンライン(追跡オフ)"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid "Ping count"
+msgstr "Ping 回数"
+
+msgid "Ping default gateway"
+msgstr "Ping デフォルト ゲートウェイ"
+
+msgid "Ping interval"
+msgstr "Ping インターバル"
+
+msgid "Ping interval during failure detection"
+msgstr "障害検出中の Ping 実行間隔です。"
+
+msgid "Ping interval during failure recovering"
+msgstr "障害復旧中の Ping 実行間隔です。"
+
+msgid "Ping size"
+msgstr "Ping サイズ"
+
+msgid "Ping timeout"
+msgstr "Ping タイムアウト"
+
+msgid "Ping tracking IP"
+msgstr "Ping トラッキング IP"
+
+msgid "Policies"
+msgstr "ポリシー"
+
+msgid ""
+"Policies are profiles grouping one or more members controlling how MWAN "
+"distributes traffic<br />Member interfaces with lower metrics are used "
+"first. Interfaces with the same metric load-balance<br />Load-balanced "
+"member interfaces distribute more traffic out those with higher weights<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be "
+"15 characters or less<br />Policies may not share the same name as "
+"configured interfaces, members or rules"
+msgstr ""
+"ポリシーは、MWANがどのようにトラフィックの分配を行うかを制御する、1つ以上のメ"
+"ンバーをグループ化するプロファイルです。<br />最小のメトリックを持つメンバー "
+"インターフェースが最初に使用されます。同じメトリックを持つ複数のインター"
+"フェースでは、負荷分散を行います。<br />負荷分散に設定されたメンバー インター"
+"フェースでは、ウェイトの値が大きい方により多くのトラフィックを分配します。"
+"<br />名前は A-Z, a-z, 0-9, _ を含むことができますが、スペースは使用できませ"
+"ん。また、15文字以内でなければなりません。<br />ポリシーでは、設定済みのイン"
+"ターフェースやメンバー、ルールと同じ名前を使用することはできません。"
+
+msgid "Policy"
+msgstr "ポリシー"
+
+msgid "Policy assigned"
+msgstr "アサイン済みポリシー"
+
+msgid "Protocol"
+msgstr "プロトコル"
+
+msgid "Recovery interval"
+msgstr "障害復旧 インターバル"
+
+msgid "Restart MWAN"
+msgstr "MWAN の再起動"
+
+msgid "Rule"
+msgstr "ルール"
+
+msgid "Rules"
+msgstr "ルール"
+
+msgid ""
+"Rules specify which traffic will use a particular MWAN policy based on IP "
+"address, port or protocol<br />Rules are matched from top to bottom. Rules "
+"below a matching rule are ignored. Traffic not matching any rule is routed "
+"using the main routing table<br />Traffic destined for known (other than "
+"default) networks is handled by the main routing table. Traffic matching a "
+"rule, but all WAN interfaces for that policy are down will be blackholed<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may "
+"not share the same name as configured interfaces, members or policies"
+msgstr ""
+"ルールは IP アドレスやポート、プロトコルを基に、トラフィックがどの MWAN ポリ"
+"シーを使用するかを設定します。<br />ルールは上から下へマッチングが行われ、合"
+"致したルールより下のルールは無視されます。全てのルールに合致しないトラフィッ"
+"クは、メインのルーティング テーブルを使用してルートが決定されます。<br />既知"
+"(デフォルト以外)のネットワークへのトラフィックは、メインのルーティング テー"
+"ブルによって制御されます。ルールに合致したトラフィックでも、当該ポリシーの全 "
+"WAN インターフェースが Down 状態の場合は blackhole 状態となります。<br />名前"
+"は A-Z, a-z, 0-9, _ を含むことができますが、スペースは使用できません。<br />"
+"ルールは、設定済みのインターフェースやメンバー、ポリシーと同じ名前を使用する"
+"ことはできません。"
+
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "秒。利用可能な値: 1-1000000。空欄の場合のデフォルト値は600です。"
+
+msgid "Source address"
+msgstr "送信元アドレス"
+
+msgid "Source port"
+msgstr "送信元ポート"
+
+msgid "Start MWAN"
+msgstr "MWAN の起動"
+
+msgid "Sticky"
+msgstr "Sticky"
+
+msgid "Sticky timeout"
+msgstr "Sticky タイムアウト"
+
+msgid "Stop MWAN"
+msgstr "MWAN の停止"
+
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "CIDR 表記のサポート(例: \"192.168.100.0/24\")"
+
+msgid "There are currently %d of 250 supported interfaces configured"
+msgstr "現在、250個中 %d 個のサポートされたインターフェースが設定済みです。"
+
+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 ""
+"リンクの Up または Down 状態を判定するために、このホスト名または IP アドレス"
+"に対して Ping の送信が行われます。常にオンラインとする場合、空欄のままにしま"
+"す。"
+
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+"このセクションでは、 \"/etc/mwan3.user\" の内容を変更することができます。"
+"<br />このファイルは、 sysupgrade 時に保持されます。<br /><br />注意: <br />"
+"このファイルは、シェルスクリプトとして解釈されます。<br />スクリプトの1行目"
+"は、&#34;#!bin/sh&#34; である必要があります(クォーテーション不要)。<br /># "
+"で始まる行はコメントであり、実行されません。<br />mwan3 のカスタム動作をここ"
+"に入力してください。これらは、 mwan3 が有効なインターフェースの<br />netifd "
+"ホットプラグ インターフェース イベント毎に実行されます。<br /><br />主に3つの"
+"環境変数が利用可能です。<br /><br />$ACTION - \"ifup\" および \"ifdown\"<br /"
+">$INTERFACE - Up または Down が行われたインターフェース名(例: \"wan\" や "
+"\"wwan\")<br />$DEVICE - Up または Down が行われた物理デバイス名(例: "
+"\"eth0\" や \"wwan0\")<br /><br />"
+
+msgid "This section allows you to modify the contents of /etc/config/mwan3"
+msgstr ""
+"このセクションでは、 /etc/config/mwan3 の内容を変更することができます。"
+
+msgid "This section allows you to modify the contents of /etc/config/network"
+msgstr ""
+"このセクションでは、 /etc/config/network の内容を変更することができます。"
+
+msgid "This section allows you to modify the contents of /etc/config/wireless"
+msgstr ""
+"このセクションでは、 /etc/config/wireless の内容を変更することができます。"
+
+msgid "Tracking IP"
+msgstr "追跡 IP"
+
+msgid "Tracking hostname or IP address"
+msgstr "追跡ホスト名または IP アドレス"
+
+msgid "Tracking method"
+msgstr "追跡方式"
+
+msgid "Tracking reliability"
+msgstr "追跡の信頼性"
+
+msgid "Traffic Rules"
+msgstr "トラフィック ルール"
+
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"以前このルールにマッチした同じアクセス元 IP アドレスからのトラフィックが、再"
+"度 Sticky 制限時間内にマッチした場合には、同じ WAN インターフェースが使用され"
+"ます。"
+
+msgid "Troubleshooting"
+msgstr "トラブルシューティング"
+
+msgid "Troubleshooting Data"
+msgstr "トラブルシューティング データ"
+
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+"ルーター自身によって発生するトラフィックのアクセス元 IP アドレスとして、この"
+"インターフェースの IP アドレスが使用されます。"
+
+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 ""
+"警告: %d 個のインターフェースが、最大個数の 250個 を超えて設定されています!"
+
+msgid ""
+"WARNING: Some interfaces are configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+"警告: 設定を誤っているか、もしくは完全に設定されていないインターフェースがあ"
+"ります!"
+
+msgid ""
+"WARNING: Some interfaces have a higher reliability requirement than there "
+"are tracking IP addresses!"
+msgstr ""
+"警告: 追跡 IP アドレスの個数より大きい追跡信頼性の値が設定されたインター"
+"フェースがあります!"
+
+msgid ""
+"WARNING: Some interfaces have duplicate metrics configured in /etc/config/"
+"network!"
+msgstr ""
+"警告: /etc/config/network で、重複するメトリックを設定されているインター"
+"フェースがあります!"
+
+msgid ""
+"WARNING: Some interfaces have no default route in the main routing table!"
+msgstr ""
+"警告: メインのルーティング テーブルで、デフォルト ルートを設定されていないイ"
+"ンターフェースがあります!"
+
+msgid ""
+"WARNING: Some interfaces have no metric configured in /etc/config/network!"
+msgstr ""
+"警告: /etc/config/network で、メトリックを設定されていないインターフェースが"
+"あります!"
+
+msgid ""
+"WARNING: Some policies have names exceeding the maximum of 15 characters!"
+msgstr ""
+"警告: 最大文字数の 15 文字を超える名前が設定されているポリシーがあります!"
+
+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 ""
+"警告: これと他のインターフェースで重複するメトリックが /etc/config/network に"
+"設定されています!"
+
+msgid ""
+"WARNING: This interface has a higher reliability requirement than there are "
+"tracking IP addresses!"
+msgstr ""
+"警告: このインターフェースは、追跡 IP アドレスの個数より大きい追跡信頼性の値"
+"を設定されています!"
+
+msgid "WARNING: This interface has no default route in the main routing table!"
+msgstr ""
+"警告: このインターフェースは、メインのルーティング テーブルにデフォルト ルー"
+"トが設定されていません!"
+
+msgid ""
+"WARNING: This interface has no metric configured in /etc/config/network!"
+msgstr ""
+"警告: このインターフェースは、 /etc/config/network でメトリックが設定されてい"
+"ません!"
+
+msgid ""
+"WARNING: This interface is configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+"警告: このインターフェースは /etc/config/network で設定が誤っているか、もしく"
+"は完全に設定されていません!"
+
+msgid ""
+"WARNING: This policy's name is %d characters exceeding the maximum of 15!"
+msgstr ""
+"警告: このポリシーの名前は、最大文字数 15 文字を超える %d 文字が設定されてい"
+"ます!"
+
+msgid ""
+"WARNING: This rule is incorrectly configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr ""
+"警告: このルールは不適切なプロトコルが指定されているか、または何も指定されて"
+"いません!プロトコルを指定し直してください!"
+
+msgid "Waiting for MWAN to %s..."
+msgstr "MWAN の %s を待っています..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "診断結果を待っています..."
+
+msgid "Weight"
+msgstr "ウエイト"
+
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"ポリシーの全メンバーがオフラインの場合、合致したトラフィックに対してこのふる"
+"まいが使用されます。"
+
+msgid "Wireless Config"
+msgstr "無線設定"
+
+msgid "Yes"
+msgstr "はい"
+
+msgid "always"
+msgstr "always"
+
+msgid "blackhole (drop)"
+msgstr "blackhole (drop)"
+
+msgid "default (use main routing table)"
+msgstr "デフォルト(メインのルーティング テーブルを使用)"
+
+msgid "ifdown"
+msgstr "ifdown"
+
+msgid "ifup"
+msgstr "ifup"
+
+msgid "never"
+msgstr "never"
+
+msgid "restart"
+msgstr "再起動"
+
+msgid "start"
+msgstr "起動"
+
+msgid "stop"
+msgstr "停止"
+
+msgid "unreachable (reject)"
+msgstr "unreachable (reject)"
diff --git a/applications/luci-app-mwan3/po/templates/mwan3.pot b/applications/luci-app-mwan3/po/templates/mwan3.pot
new file mode 100644 (file)
index 0000000..ed9fdb1
--- /dev/null
@@ -0,0 +1,562 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "%d hour"
+msgstr ""
+
+msgid "%d minute"
+msgstr ""
+
+msgid "%d minutes"
+msgstr ""
+
+msgid "%d second"
+msgstr ""
+
+msgid "%d seconds"
+msgstr ""
+
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Check IP rules"
+msgstr ""
+
+msgid "Check routing table"
+msgstr ""
+
+msgid "Collecting data..."
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Currently Configured Interfaces"
+msgstr ""
+
+msgid "Currently Configured Members"
+msgstr ""
+
+msgid "Currently Configured Policies"
+msgstr ""
+
+msgid "Destination address"
+msgstr ""
+
+msgid "Destination port"
+msgstr ""
+
+msgid "Detailed Status"
+msgstr ""
+
+msgid "Diagnostic Results"
+msgstr ""
+
+msgid "Diagnostics"
+msgstr ""
+
+msgid "Disabled"
+msgstr ""
+
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+msgid "Enabled"
+msgstr ""
+
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+msgid "Error collecting troubleshooting information"
+msgstr ""
+
+msgid "Errors"
+msgstr ""
+
+msgid "Expect interface state on up event"
+msgstr ""
+
+msgid "Failure interval"
+msgstr ""
+
+msgid "Firewall mask"
+msgstr ""
+
+msgid "Flush conntrack table"
+msgstr ""
+
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+msgid "Globals"
+msgstr ""
+
+msgid "Globals mwan3 options"
+msgstr ""
+
+msgid "Hotplug Script"
+msgstr ""
+
+msgid "Hotplug ifdown"
+msgstr ""
+
+msgid "Hotplug ifup"
+msgstr ""
+
+msgid "IPset"
+msgstr ""
+
+msgid "IPv4"
+msgstr ""
+
+msgid "IPv6"
+msgstr ""
+
+msgid "Initial state"
+msgstr ""
+
+msgid "Interface"
+msgstr ""
+
+msgid "Interface Status"
+msgstr ""
+
+msgid "Interface down"
+msgstr ""
+
+msgid "Interface up"
+msgstr ""
+
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+msgid "Interfaces"
+msgstr ""
+
+msgid "Internet Protocol"
+msgstr ""
+
+msgid "Keep failure interval"
+msgstr ""
+
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr ""
+
+msgid "Last resort"
+msgstr ""
+
+msgid "Load Balancing"
+msgstr ""
+
+msgid "Loading"
+msgstr ""
+
+msgid "Local source interface"
+msgstr ""
+
+msgid "MWAN Config"
+msgstr ""
+
+msgid "MWAN Detailed Status"
+msgstr ""
+
+msgid "MWAN Interface Configuration"
+msgstr ""
+
+msgid "MWAN Interface Configuration - %s"
+msgstr ""
+
+msgid "MWAN Interface Diagnostics"
+msgstr ""
+
+msgid "MWAN Interface Live Status"
+msgstr ""
+
+msgid "MWAN Interface Systemlog"
+msgstr ""
+
+msgid "MWAN Member Configuration"
+msgstr ""
+
+msgid "MWAN Member Configuration - %s"
+msgstr ""
+
+msgid "MWAN Policy Configuration"
+msgstr ""
+
+msgid "MWAN Policy Configuration - %s"
+msgstr ""
+
+msgid "MWAN Rule Configuration"
+msgstr ""
+
+msgid "MWAN Rule Configuration - %s"
+msgstr ""
+
+msgid "MWAN Service Control"
+msgstr ""
+
+msgid ""
+"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN "
+"requires that all interfaces have a unique metric configured in /etc/config/"
+"network<br />Names must match the interface name found in /etc/config/"
+"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, "
+"_ and no spaces<br />Interfaces may not share the same name as configured "
+"members, policies or rules"
+msgstr ""
+
+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 ""
+
+msgid "Member"
+msgstr ""
+
+msgid "Member used"
+msgstr ""
+
+msgid "Members"
+msgstr ""
+
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface<br /"
+">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 ""
+
+msgid "Members assigned"
+msgstr ""
+
+msgid "Metric"
+msgstr ""
+
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+msgid "Network Config"
+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"
+msgstr ""
+
+msgid "Online (tracking active)"
+msgstr ""
+
+msgid "Online (tracking off)"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Ping count"
+msgstr ""
+
+msgid "Ping default gateway"
+msgstr ""
+
+msgid "Ping interval"
+msgstr ""
+
+msgid "Ping interval during failure detection"
+msgstr ""
+
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+msgid "Ping size"
+msgstr ""
+
+msgid "Ping timeout"
+msgstr ""
+
+msgid "Ping tracking IP"
+msgstr ""
+
+msgid "Policies"
+msgstr ""
+
+msgid ""
+"Policies are profiles grouping one or more members controlling how MWAN "
+"distributes traffic<br />Member interfaces with lower metrics are used "
+"first. Interfaces with the same metric load-balance<br />Load-balanced "
+"member interfaces distribute more traffic out those with higher weights<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be "
+"15 characters or less<br />Policies may not share the same name as "
+"configured interfaces, members or rules"
+msgstr ""
+
+msgid "Policy"
+msgstr ""
+
+msgid "Policy assigned"
+msgstr ""
+
+msgid "Protocol"
+msgstr ""
+
+msgid "Recovery interval"
+msgstr ""
+
+msgid "Restart MWAN"
+msgstr ""
+
+msgid "Rule"
+msgstr ""
+
+msgid "Rules"
+msgstr ""
+
+msgid ""
+"Rules specify which traffic will use a particular MWAN policy based on IP "
+"address, port or protocol<br />Rules are matched from top to bottom. Rules "
+"below a matching rule are ignored. Traffic not matching any rule is routed "
+"using the main routing table<br />Traffic destined for known (other than "
+"default) networks is handled by the main routing table. Traffic matching a "
+"rule, but all WAN interfaces for that policy are down will be blackholed<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may "
+"not share the same name as configured interfaces, members or policies"
+msgstr ""
+
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+msgid "Source address"
+msgstr ""
+
+msgid "Source port"
+msgstr ""
+
+msgid "Start MWAN"
+msgstr ""
+
+msgid "Sticky"
+msgstr ""
+
+msgid "Sticky timeout"
+msgstr ""
+
+msgid "Stop MWAN"
+msgstr ""
+
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+msgid "There are currently %d of 250 supported interfaces configured"
+msgstr ""
+
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+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 ""
+
+msgid ""
+"This section allows you to modify the content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+
+msgid "This section allows you to modify the contents of /etc/config/mwan3"
+msgstr ""
+
+msgid "This section allows you to modify the contents of /etc/config/network"
+msgstr ""
+
+msgid "This section allows you to modify the contents of /etc/config/wireless"
+msgstr ""
+
+msgid "Tracking IP"
+msgstr ""
+
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+msgid "Tracking method"
+msgstr ""
+
+msgid "Tracking reliability"
+msgstr ""
+
+msgid "Traffic Rules"
+msgstr ""
+
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+msgid "Troubleshooting"
+msgstr ""
+
+msgid "Troubleshooting Data"
+msgstr ""
+
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr ""
+
+msgid "View the contents of /etc/protocols for protocol descriptions"
+msgstr ""
+
+msgid "WARNING: %d interfaces are configured exceeding the maximum of 250!"
+msgstr ""
+
+msgid ""
+"WARNING: Some interfaces are configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+
+msgid ""
+"WARNING: Some interfaces have a higher reliability requirement than there "
+"are tracking IP addresses!"
+msgstr ""
+
+msgid ""
+"WARNING: Some interfaces have duplicate metrics configured in /etc/config/"
+"network!"
+msgstr ""
+
+msgid ""
+"WARNING: Some interfaces have no default route in the main routing table!"
+msgstr ""
+
+msgid ""
+"WARNING: Some interfaces have no metric configured in /etc/config/network!"
+msgstr ""
+
+msgid ""
+"WARNING: Some policies have names exceeding the maximum of 15 characters!"
+msgstr ""
+
+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 ""
+
+msgid ""
+"WARNING: This interface has a higher reliability requirement than there are "
+"tracking IP addresses!"
+msgstr ""
+
+msgid "WARNING: This interface has no default route in the main routing table!"
+msgstr ""
+
+msgid ""
+"WARNING: This interface has no metric configured in /etc/config/network!"
+msgstr ""
+
+msgid ""
+"WARNING: This interface is configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr ""
+
+msgid ""
+"WARNING: This policy's name is %d characters exceeding the maximum of 15!"
+msgstr ""
+
+msgid ""
+"WARNING: This rule is incorrectly configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr ""
+
+msgid "Waiting for MWAN to %s..."
+msgstr ""
+
+msgid "Waiting for diagnostic results..."
+msgstr ""
+
+msgid "Weight"
+msgstr ""
+
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+msgid "Wireless Config"
+msgstr ""
+
+msgid "Yes"
+msgstr ""
+
+msgid "always"
+msgstr ""
+
+msgid "blackhole (drop)"
+msgstr ""
+
+msgid "default (use main routing table)"
+msgstr ""
+
+msgid "ifdown"
+msgstr ""
+
+msgid "ifup"
+msgstr ""
+
+msgid "never"
+msgstr ""
+
+msgid "restart"
+msgstr ""
+
+msgid "start"
+msgstr ""
+
+msgid "stop"
+msgstr ""
+
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/applications/luci-app-mwan3/po/zh-cn/mwan3.po b/applications/luci-app-mwan3/po/zh-cn/mwan3.po
new file mode 100644 (file)
index 0000000..d0b92a6
--- /dev/null
@@ -0,0 +1,631 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-28 16:58+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+msgid "%d hour"
+msgstr "%d 小时"
+
+msgid "%d minute"
+msgstr "%d 分钟"
+
+msgid "%d minutes"
+msgstr "%d 分钟"
+
+msgid "%d second"
+msgstr "%d 秒"
+
+msgid "%d seconds"
+msgstr "%d 秒"
+
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"取值范围:1-100。这个设置项指定了当多少个 IP 地址能够连通时接口会被认为在线"
+
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "取值范围:1-100。如果不填写,默认值为 1"
+
+msgid "Advanced"
+msgstr "高级"
+
+msgid "Check IP rules"
+msgstr "检查 IP 规则"
+
+msgid "Check routing table"
+msgstr "检查路由表"
+
+msgid "Collecting data..."
+msgstr "正在收集数据..."
+
+msgid "Configuration"
+msgstr "配置"
+
+msgid "Currently Configured Interfaces"
+msgstr "当前配置的接口"
+
+msgid "Currently Configured Members"
+msgstr "当前配置的成员"
+
+msgid "Currently Configured Policies"
+msgstr "当前配置的策略"
+
+msgid "Destination address"
+msgstr "目标地址"
+
+msgid "Destination port"
+msgstr "目标端口"
+
+msgid "Detailed Status"
+msgstr "详细状态"
+
+msgid "Diagnostic Results"
+msgstr "诊断结果"
+
+msgid "Diagnostics"
+msgstr "诊断"
+
+msgid "Disabled"
+msgstr "已禁用"
+
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接口将会重新上线"
+
+msgid "Enabled"
+msgstr "已启用"
+
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "输入十六进制值,以 <code>0x</code> 开头"
+
+msgid "Error collecting troubleshooting information"
+msgstr "收集故障排除信息时出错"
+
+msgid "Errors"
+msgstr "错误"
+
+msgid "Expect interface state on up event"
+msgstr "在 up 事件发生时的预期接口状态"
+
+msgid "Failure interval"
+msgstr "故障检测间隔"
+
+msgid "Firewall mask"
+msgstr "防火墙掩码"
+
+msgid "Flush conntrack table"
+msgstr "刷新连接跟踪表"
+
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "在接口事件触发时刷新全局防火墙连接跟踪表"
+
+msgid "Globals"
+msgstr "全局"
+
+msgid "Globals mwan3 options"
+msgstr "全局 mwan3 选项"
+
+msgid "Hotplug Script"
+msgstr "Hotplug 脚本"
+
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+msgid "IPset"
+msgstr "IPset"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Initial state"
+msgstr "初始状态"
+
+msgid "Interface"
+msgstr "接口"
+
+msgid "Interface Status"
+msgstr "接口状态"
+
+msgid "Interface down"
+msgstr "接口离线"
+
+msgid "Interface up"
+msgstr "接口在线"
+
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "当 Ping 失败次数达到这个数值后,接口会被认为离线"
+
+msgid "Interfaces"
+msgstr "接口"
+
+msgid "Internet Protocol"
+msgstr "互联网协议"
+
+msgid "Keep failure interval"
+msgstr "保持故障检测间隔"
+
+msgid "Keep ping failure interval during failure state"
+msgstr "在故障状态期间保持的 Ping 故障检测间隔"
+
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr "最近 50 条 MWAN 系统日志,最新条目排在顶部:"
+
+msgid "Last resort"
+msgstr "备用成员"
+
+msgid "Load Balancing"
+msgstr "负载均衡"
+
+msgid "Loading"
+msgstr "载入中"
+
+msgid "Local source interface"
+msgstr "本地源接口"
+
+msgid "MWAN Config"
+msgstr "MWAN 配置文件"
+
+msgid "MWAN Detailed Status"
+msgstr "MWAN 详细状态"
+
+msgid "MWAN Interface Configuration"
+msgstr "MWAN 接口配置"
+
+msgid "MWAN Interface Configuration - %s"
+msgstr "MWAN 接口配置 - %s"
+
+msgid "MWAN Interface Diagnostics"
+msgstr "MWAN 接口诊断"
+
+msgid "MWAN Interface Live Status"
+msgstr "MWAN 接口实时状态"
+
+msgid "MWAN Interface Systemlog"
+msgstr "MWAN 接口系统日志"
+
+msgid "MWAN Member Configuration"
+msgstr "MWAN 成员配置"
+
+msgid "MWAN Member Configuration - %s"
+msgstr "MWAN 成员配置 - %s"
+
+msgid "MWAN Policy Configuration"
+msgstr "MWAN 策略配置"
+
+msgid "MWAN Policy Configuration - %s"
+msgstr "MWAN 策略配置 - %s"
+
+msgid "MWAN Rule Configuration"
+msgstr "MWAN 规则配置"
+
+msgid "MWAN Rule Configuration - %s"
+msgstr "MWAN 规则配置 - %s"
+
+msgid "MWAN Service Control"
+msgstr "MWAN 服务控制"
+
+msgid ""
+"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN "
+"requires that all interfaces have a unique metric configured in /etc/config/"
+"network<br />Names must match the interface name found in /etc/config/"
+"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, "
+"_ and no spaces<br />Interfaces may not share the same name as configured "
+"members, policies or rules"
+msgstr ""
+"MWAN 支持最多 250 个物理或逻辑接口。<br />MWAN 要求所有接口必须在 /etc/"
+"config/network 中设定唯一的网关跃点。<br />名称必须与 /etc/config/network 中"
+"的接口名称匹配。(可查看“高级”选项卡)<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”)不含引号"
+
+msgid "Member"
+msgstr "成员"
+
+msgid "Member used"
+msgstr "使用的成员"
+
+msgid "Members"
+msgstr "成员"
+
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface<br /"
+">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 />名称"
+"允许包括 A-Z、 a-、0-9、_ 但是不能有空格。<br />成员不应该与接口、策略、规则"
+"中的任意一个设置项使用相同的名称"
+
+msgid "Members assigned"
+msgstr "分配的成员"
+
+msgid "Metric"
+msgstr "跃点数"
+
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"匹配 IPset 规则列表名称。需要先配置 /etc/dnsmasq.conf 中的 IPset 规则(例"
+"如:“ipset=/youtube.com/youtube”)"
+
+msgid "Network Config"
+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"
+msgstr "在线"
+
+msgid "Online (tracking active)"
+msgstr "在线(跟踪启用中)"
+
+msgid "Online (tracking off)"
+msgstr "在线(跟踪已关闭)"
+
+msgid "Overview"
+msgstr "概况"
+
+msgid "Ping count"
+msgstr "Ping 计数"
+
+msgid "Ping default gateway"
+msgstr "Ping 默认网关"
+
+msgid "Ping interval"
+msgstr "Ping 间隔"
+
+msgid "Ping interval during failure detection"
+msgstr "故障检测期间的 Ping 间隔"
+
+msgid "Ping interval during failure recovering"
+msgstr "故障恢复期间的 Ping 间隔"
+
+msgid "Ping size"
+msgstr "Ping 大小"
+
+msgid "Ping timeout"
+msgstr "Ping 超时"
+
+msgid "Ping tracking IP"
+msgstr "Ping 跟踪 IP"
+
+msgid "Policies"
+msgstr "策略"
+
+msgid ""
+"Policies are profiles grouping one or more members controlling how MWAN "
+"distributes traffic<br />Member interfaces with lower metrics are used "
+"first. Interfaces with the same metric load-balance<br />Load-balanced "
+"member interfaces distribute more traffic out those with higher weights<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be "
+"15 characters or less<br />Policies may not share the same name as "
+"configured interfaces, members or rules"
+msgstr ""
+"“策略”把成员进行分组,告诉 MWAN 如何分配“规则”中使用这一策略的流量<br />拥有"
+"较低跃点数的成员将会被优先使用。拥有相同跃点数的成员把流量进行负载均衡。<br /"
+">进行负载均衡的成员之间拥有较高比重的成员将会被分配到更多流量。<br />名称允许"
+"包括A-Z、a-z、0-9、_ 但是不能有空格。名称应该在 15 个字符以内<br />策略不应该"
+"与接口、成员、规则中的任意一个设置项使用相同的名称"
+
+msgid "Policy"
+msgstr "策略"
+
+msgid "Policy assigned"
+msgstr "分配的策略"
+
+msgid "Protocol"
+msgstr "通信协议"
+
+msgid "Recovery interval"
+msgstr "故障恢复间隔"
+
+msgid "Restart MWAN"
+msgstr "重启 MWAN"
+
+msgid "Rule"
+msgstr "规则"
+
+msgid "Rules"
+msgstr "规则"
+
+msgid ""
+"Rules specify which traffic will use a particular MWAN policy based on IP "
+"address, port or protocol<br />Rules are matched from top to bottom. Rules "
+"below a matching rule are ignored. Traffic not matching any rule is routed "
+"using the main routing table<br />Traffic destined for known (other than "
+"default) networks is handled by the main routing table. Traffic matching a "
+"rule, but all WAN interfaces for that policy are down will be blackholed<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may "
+"not share the same name as configured interfaces, members or policies"
+msgstr ""
+"“规则”基于 IP 地址、协议、端口把流量划分到指定的“策略”中。<br />规则按照从上"
+"到下的顺序进行匹配。除了第一条能够匹配一次通信的规则以外,其它规则将被忽略。"
+"不匹配任何规则的通信将会由系统默认路由表进行。<br />来自已知的网络的转发流量"
+"由系统默认路由表接手,然后 MWAN 从中匹配出相应的流量并转移到 MWAN 自己的路由"
+"表。但是所有被划分到一个无法使用的策略的流量将会无法正常进行路由。<br />名称"
+"允许包括A-Z、a-z、0-9、_ 但是不能有空格。<br />规则不应该与接口、成员、策略中"
+"的任意一个设置项使用相同的名称"
+
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "单位为秒。接受的值:1-1000000。留空则使用默认值 600 秒"
+
+msgid "Source address"
+msgstr "源地址"
+
+msgid "Source port"
+msgstr "源端口"
+
+msgid "Start MWAN"
+msgstr "启动 MWAN"
+
+msgid "Sticky"
+msgstr "粘滞模式"
+
+msgid "Sticky timeout"
+msgstr "粘滞超时"
+
+msgid "Stop MWAN"
+msgstr "停止 MWAN"
+
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "支持 CIDR 记法(例如:\"192.168.100.0/24\")不含引号"
+
+msgid "There are currently %d of 250 supported interfaces configured"
+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 content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+"这里允许您修改“/etc/mwan3.user”的内容。<br />该文件在 sysupgrade 期间也会保"
+"留。<br /><br />注意:<br />该文件会作为 shell 脚本解释。<br />脚本的第一行必"
+"须是&#34;#!/bin/sh&#34;,不带引号。<br />以#开头的行是注释,不会执行。<br />"
+"将您的自定义 mwan3 动作放在这里,他们将<br />在启用 mwan3 的接口上<br />在 "
+"netifd hotplug 接口事件时执行。<br /><br />有三个主要的环境变量传递给这个脚"
+"本。<br /><br />$ACTION “ifup”或“ifdown”<br />$INTERFACE 启动或停止的接口名"
+"(例如“wan”或“wwan”)<br />$DEVICE 启动或停止接口的物理设备名(例"
+"如“eth0”或“wwan0”)<br /><br />"
+
+msgid "This section allows you to modify the contents of /etc/config/mwan3"
+msgstr "这里允许您修改 /etc/config/mwan3 的内容"
+
+msgid "This section allows you to modify the contents of /etc/config/network"
+msgstr "这里允许您修改 /etc/config/network 的内容"
+
+msgid "This section allows you to modify the contents of /etc/config/wireless"
+msgstr "这里允许您修改 /etc/config/wireless 的内容"
+
+msgid "Tracking IP"
+msgstr "跟踪的 IP"
+
+msgid "Tracking hostname or IP address"
+msgstr "跟踪的主机或 IP 地址"
+
+msgid "Tracking method"
+msgstr "跟踪方式"
+
+msgid "Tracking reliability"
+msgstr "跟踪可靠性"
+
+msgid "Traffic Rules"
+msgstr "流量规则"
+
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"来自相同源 IP 的流量,如果已经匹配过此规则并且在粘滞超时时间内,将会使用相同"
+"的 WAN 接口"
+
+msgid "Troubleshooting"
+msgstr "故障排除"
+
+msgid "Troubleshooting Data"
+msgstr "故障排除数据"
+
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr "使用该接口的 IP 地址作为路由器本身发起的流量的源 IP 地址"
+
+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 "警告:已配置 %d 个接口,超过最大值 250!"
+
+msgid ""
+"WARNING: Some interfaces are configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr "警告:某些接口配置不正确或未配置到 /etc/config/network!"
+
+msgid ""
+"WARNING: Some interfaces have a higher reliability requirement than there "
+"are tracking IP addresses!"
+msgstr "警告:某些接口的跟踪可靠性要求大于了跟踪 IP 地址总数!"
+
+msgid ""
+"WARNING: Some interfaces have duplicate metrics configured in /etc/config/"
+"network!"
+msgstr "警告:某些接口在 /etc/config/network 中配置了相同的跃点数!"
+
+msgid ""
+"WARNING: Some interfaces have no default route in the main routing table!"
+msgstr "警告:某些接口在主路由表中没有默认路由!"
+
+msgid ""
+"WARNING: Some interfaces have no metric configured in /etc/config/network!"
+msgstr "警告:某些接口没有在 /etc/config/network 中配置跃点数!"
+
+msgid ""
+"WARNING: Some policies have names exceeding the maximum of 15 characters!"
+msgstr "警告:某些策略的名称超过了 15 个字符!"
+
+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 "警告:此接口和其他接口在 /etc/config/network 中配置了相同的跃点数!"
+
+msgid ""
+"WARNING: This interface has a higher reliability requirement than there are "
+"tracking IP addresses!"
+msgstr "警告:此接口的跟踪可靠性要求大于了跟踪 IP 地址总数!"
+
+msgid "WARNING: This interface has no default route in the main routing table!"
+msgstr "警告:此接口在主路由表中没有默认路由!"
+
+msgid ""
+"WARNING: This interface has no metric configured in /etc/config/network!"
+msgstr "警告:此接口没有在 /etc/config/network 中配置跃点数!"
+
+msgid ""
+"WARNING: This interface is configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr "警告:此接口配置不正确或未配置到 /etc/config/network!"
+
+msgid ""
+"WARNING: This policy's name is %d characters exceeding the maximum of 15!"
+msgstr "警告:此策略的名称具有 %d 个字符,超过了 15 个字符!"
+
+msgid ""
+"WARNING: This rule is incorrectly configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr "警告:此规则没有配置或配置了不正确的协议,请重新指定协议!"
+
+msgid "Waiting for MWAN to %s..."
+msgstr "等待 MWAN %s..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "等待诊断结果..."
+
+msgid "Weight"
+msgstr "比重"
+
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr "当所有策略成员都无法使用的时候,对使用该策略的流量使用这个操作"
+
+msgid "Wireless Config"
+msgstr "无线配置"
+
+msgid "Yes"
+msgstr "是"
+
+msgid "always"
+msgstr "总是"
+
+msgid "blackhole (drop)"
+msgstr "黑洞(丢弃)"
+
+msgid "default (use main routing table)"
+msgstr "默认(使用主路由表)"
+
+msgid "ifdown"
+msgstr "ifdown"
+
+msgid "ifup"
+msgstr "ifup"
+
+msgid "never"
+msgstr "从不"
+
+msgid "restart"
+msgstr "重启"
+
+msgid "start"
+msgstr "启动"
+
+msgid "stop"
+msgstr "停止"
+
+msgid "unreachable (reject)"
+msgstr "不可达(拒绝)"
+
+#~ msgid "Restore default hotplug script"
+#~ msgstr "恢复默认的 hotplug 脚本"
+
+#~ msgid "Restore..."
+#~ msgstr "恢复..."
+
+#~ msgid ""
+#~ "This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
+#~ "mwancustom<br />This is useful for running system commands and/or scripts "
+#~ "based on interface ifup or ifdown hotplug events<br /><br />Notes:<br /"
+#~ ">The first line of the script must be &#34;#!/bin/sh&#34; without "
+#~ "quotes<br />Lines beginning with # are comments and are not executed<br /"
+#~ "><br />Available variables:<br />$ACTION is the hotplug event (ifup, "
+#~ "ifdown)<br />$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 />这可以在接"
+#~ "口 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 等)"
diff --git a/applications/luci-app-mwan3/po/zh-tw/mwan3.po b/applications/luci-app-mwan3/po/zh-tw/mwan3.po
new file mode 100644 (file)
index 0000000..04711ac
--- /dev/null
@@ -0,0 +1,630 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-28 16:58+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+msgid "%d hour"
+msgstr "%d 小時"
+
+msgid "%d minute"
+msgstr "%d 分鐘"
+
+msgid "%d minutes"
+msgstr "%d 分鐘"
+
+msgid "%d second"
+msgstr "%d 秒"
+
+msgid "%d seconds"
+msgstr "%d 秒"
+
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"取值範圍:1-100。這個設定項指定了當多少個 IP 位址能夠連通時介面會被認為線上"
+
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "取值範圍:1-100。如果不填寫,預設值為 1"
+
+msgid "Advanced"
+msgstr "高階"
+
+msgid "Check IP rules"
+msgstr "檢查 IP 規則"
+
+msgid "Check routing table"
+msgstr "檢查路由表"
+
+msgid "Collecting data..."
+msgstr "正在收集資料..."
+
+msgid "Configuration"
+msgstr "配置"
+
+msgid "Currently Configured Interfaces"
+msgstr "當前配置的介面"
+
+msgid "Currently Configured Members"
+msgstr "當前配置的成員"
+
+msgid "Currently Configured Policies"
+msgstr "當前配置的策略"
+
+msgid "Destination address"
+msgstr "目標位址"
+
+msgid "Destination port"
+msgstr "目標埠"
+
+msgid "Detailed Status"
+msgstr "詳細狀態"
+
+msgid "Diagnostic Results"
+msgstr "診斷結果"
+
+msgid "Diagnostics"
+msgstr "診斷"
+
+msgid "Disabled"
+msgstr "已禁用"
+
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr "當 Ping 成功次數達到這個數值後,已經被認為離線的介面將會重新上線"
+
+msgid "Enabled"
+msgstr "已啟用"
+
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "輸入十六進位制值,以 <code>0x</code> 開頭"
+
+msgid "Error collecting troubleshooting information"
+msgstr "收集故障排除資訊時出錯"
+
+msgid "Errors"
+msgstr "錯誤"
+
+msgid "Expect interface state on up event"
+msgstr "在 up 事件發生時的預期介面狀態"
+
+msgid "Failure interval"
+msgstr "故障檢測間隔"
+
+msgid "Firewall mask"
+msgstr "防火牆掩碼"
+
+msgid "Flush conntrack table"
+msgstr "重新整理連線跟蹤表"
+
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "在介面事件觸發時重新整理全域性防火牆連線跟蹤表"
+
+msgid "Globals"
+msgstr "全域性"
+
+msgid "Globals mwan3 options"
+msgstr "全域性 mwan3 選項"
+
+msgid "Hotplug Script"
+msgstr "Hotplug 指令碼"
+
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+msgid "IPset"
+msgstr "IPset"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Initial state"
+msgstr "初始狀態"
+
+msgid "Interface"
+msgstr "介面"
+
+msgid "Interface Status"
+msgstr "介面狀態"
+
+msgid "Interface down"
+msgstr "介面離線"
+
+msgid "Interface up"
+msgstr "介面線上"
+
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "當 Ping 失敗次數達到這個數值後,介面會被認為離線"
+
+msgid "Interfaces"
+msgstr "介面"
+
+msgid "Internet Protocol"
+msgstr "網際網路協議"
+
+msgid "Keep failure interval"
+msgstr "保持故障檢測間隔"
+
+msgid "Keep ping failure interval during failure state"
+msgstr "在故障狀態期間保持的 Ping 故障檢測間隔"
+
+msgid "Last 50 MWAN systemlog entries. Newest entries sorted at the top :"
+msgstr "最近 50 條 MWAN 系統日誌,最新條目排在頂部:"
+
+msgid "Last resort"
+msgstr "備用成員"
+
+msgid "Load Balancing"
+msgstr "負載均衡"
+
+msgid "Loading"
+msgstr "載入中"
+
+msgid "Local source interface"
+msgstr "本地源介面"
+
+msgid "MWAN Config"
+msgstr "MWAN 配置檔案"
+
+msgid "MWAN Detailed Status"
+msgstr "MWAN 詳細狀態"
+
+msgid "MWAN Interface Configuration"
+msgstr "MWAN 介面配置"
+
+msgid "MWAN Interface Configuration - %s"
+msgstr "MWAN 介面配置 - %s"
+
+msgid "MWAN Interface Diagnostics"
+msgstr "MWAN 介面診斷"
+
+msgid "MWAN Interface Live Status"
+msgstr "MWAN 介面實時狀態"
+
+msgid "MWAN Interface Systemlog"
+msgstr "MWAN 介面系統日誌"
+
+msgid "MWAN Member Configuration"
+msgstr "MWAN 成員配置"
+
+msgid "MWAN Member Configuration - %s"
+msgstr "MWAN 成員配置 - %s"
+
+msgid "MWAN Policy Configuration"
+msgstr "MWAN 策略配置"
+
+msgid "MWAN Policy Configuration - %s"
+msgstr "MWAN 策略配置 - %s"
+
+msgid "MWAN Rule Configuration"
+msgstr "MWAN 規則配置"
+
+msgid "MWAN Rule Configuration - %s"
+msgstr "MWAN 規則配置 - %s"
+
+msgid "MWAN Service Control"
+msgstr "MWAN 服務控制"
+
+msgid ""
+"MWAN supports up to 250 physical and/or logical interfaces<br />MWAN "
+"requires that all interfaces have a unique metric configured in /etc/config/"
+"network<br />Names must match the interface name found in /etc/config/"
+"network (see advanced tab)<br />Names may contain characters A-Z, a-z, 0-9, "
+"_ and no spaces<br />Interfaces may not share the same name as configured "
+"members, policies or rules"
+msgstr ""
+"MWAN 支援最多 250 個物理或邏輯介面。<br />MWAN 要求所有介面必須在 /etc/"
+"config/network 中設定唯一的閘道器躍點。<br />名稱必須與 /etc/config/network "
+"中的介面名稱匹配。(可檢視“高階”選項卡)<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”)不含引號"
+
+msgid "Member"
+msgstr "成員"
+
+msgid "Member used"
+msgstr "使用的成員"
+
+msgid "Members"
+msgstr "成員"
+
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface<br /"
+">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 />名"
+"稱允許包括 A-Z、 a-、0-9、_ 但是不能有空格。<br />成員不應該與介面、策略、規"
+"則中的任意一個設定項使用相同的名稱"
+
+msgid "Members assigned"
+msgstr "分配的成員"
+
+msgid "Metric"
+msgstr "躍點數"
+
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"匹配 IPset 規則列表名稱。需要先配置 /etc/dnsmasq.conf 中的 IPset 規則(例"
+"如:“ipset=/youtube.com/youtube”)"
+
+msgid "Network Config"
+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"
+msgstr "線上"
+
+msgid "Online (tracking active)"
+msgstr "線上(跟蹤啟用中)"
+
+msgid "Online (tracking off)"
+msgstr "線上(跟蹤已關閉)"
+
+msgid "Overview"
+msgstr "概況"
+
+msgid "Ping count"
+msgstr "Ping 計數"
+
+msgid "Ping default gateway"
+msgstr "Ping 預設閘道器"
+
+msgid "Ping interval"
+msgstr "Ping 間隔"
+
+msgid "Ping interval during failure detection"
+msgstr "故障檢測期間的 Ping 間隔"
+
+msgid "Ping interval during failure recovering"
+msgstr "故障恢復期間的 Ping 間隔"
+
+msgid "Ping size"
+msgstr "Ping 大小"
+
+msgid "Ping timeout"
+msgstr "Ping 超時"
+
+msgid "Ping tracking IP"
+msgstr "Ping 跟蹤 IP"
+
+msgid "Policies"
+msgstr "策略"
+
+msgid ""
+"Policies are profiles grouping one or more members controlling how MWAN "
+"distributes traffic<br />Member interfaces with lower metrics are used "
+"first. Interfaces with the same metric load-balance<br />Load-balanced "
+"member interfaces distribute more traffic out those with higher weights<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces. Names must be "
+"15 characters or less<br />Policies may not share the same name as "
+"configured interfaces, members or rules"
+msgstr ""
+"“策略”把成員進行分組,告訴 MWAN 如何分配“規則”中使用這一策略的流量<br />擁有"
+"較低躍點數的成員將會被優先使用。擁有相同躍點數的成員把流量進行負載均衡。<br /"
+">進行負載均衡的成員之間擁有較高比重的成員將會被分配到更多流量。<br />名稱允許"
+"包括A-Z、a-z、0-9、_ 但是不能有空格。名稱應該在 15 個字元以內<br />策略不應該"
+"與介面、成員、規則中的任意一個設定項使用相同的名稱"
+
+msgid "Policy"
+msgstr "策略"
+
+msgid "Policy assigned"
+msgstr "分配的策略"
+
+msgid "Protocol"
+msgstr "通訊協議"
+
+msgid "Recovery interval"
+msgstr "故障恢復間隔"
+
+msgid "Restart MWAN"
+msgstr "重啟 MWAN"
+
+msgid "Rule"
+msgstr "規則"
+
+msgid "Rules"
+msgstr "規則"
+
+msgid ""
+"Rules specify which traffic will use a particular MWAN policy based on IP "
+"address, port or protocol<br />Rules are matched from top to bottom. Rules "
+"below a matching rule are ignored. Traffic not matching any rule is routed "
+"using the main routing table<br />Traffic destined for known (other than "
+"default) networks is handled by the main routing table. Traffic matching a "
+"rule, but all WAN interfaces for that policy are down will be blackholed<br /"
+">Names may contain characters A-Z, a-z, 0-9, _ and no spaces<br />Rules may "
+"not share the same name as configured interfaces, members or policies"
+msgstr ""
+"“規則”基於 IP 位址、協議、埠把流量劃分到指定的“策略”中。<br />規則按照從上到"
+"下的順序進行匹配。除了第一條能夠匹配一次通訊的規則以外,其它規則將被忽略。不"
+"匹配任何規則的通訊將會由系統預設路由表進行。<br />來自已知的網路的轉發流量由"
+"系統預設路由表接手,然後 MWAN 從中匹配出相應的流量並轉移到 MWAN 自己的路由"
+"表。但是所有被劃分到一個無法使用的策略的流量將會無法正常進行路由。<br />名稱"
+"允許包括A-Z、a-z、0-9、_ 但是不能有空格。<br />規則不應該與介面、成員、策略中"
+"的任意一個設定項使用相同的名稱"
+
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "單位為秒。接受的值:1-1000000。留空則使用預設值 600 秒"
+
+msgid "Source address"
+msgstr "源位址"
+
+msgid "Source port"
+msgstr "源埠"
+
+msgid "Start MWAN"
+msgstr "啟動 MWAN"
+
+msgid "Sticky"
+msgstr "粘滯模式"
+
+msgid "Sticky timeout"
+msgstr "粘滯超時"
+
+msgid "Stop MWAN"
+msgstr "停止 MWAN"
+
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "支援 CIDR 記法(例如:\"192.168.100.0/24\")不含引號"
+
+msgid "There are currently %d of 250 supported interfaces configured"
+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 content of \"/etc/mwan3.user\".<br /"
+">The file is also preserved during sysupgrade.<br /><br />Notes:<br />This "
+"file is interpreted as a shell script.<br />The first line of the script "
+"must be &#34;#!/bin/sh&#34; without quotes.<br />Lines beginning with # are "
+"comments and are not executed.<br />Put your custom mwan3 action here, they "
+"will<br />be executed with each netifd hotplug interface event<br />on "
+"interfaces for which mwan3 is enabled.<br /><br />There are three main "
+"environment variables that are passed to this script.<br /><br />$ACTION "
+"Either \"ifup\" or \"ifdown\"<br />$INTERFACE Name of the interface which "
+"went up or down (e.g. \"wan\" or \"wwan\")<br />$DEVICE Physical device name "
+"which interface went up or down (e.g. \"eth0\" or \"wwan0\")<br /><br />"
+msgstr ""
+"這裡允許您修改“/etc/mwan3.user”的內容。<br />該檔案在 sysupgrade 期間也會保"
+"留。<br /><br />注意:<br />該檔案會作為 shell 指令碼解釋。<br />指令碼的第一"
+"行必須是&#34;#!/bin/sh&#34;,不帶引號。<br />以#開頭的行是註釋,不會執行。"
+"<br />將您的自定義 mwan3 動作放在這裡,他們將<br />在啟用 mwan3 的介面上<br /"
+">在 netifd hotplug 介面事件時執行。<br /><br />有三個主要的環境變數傳遞給這個"
+"腳本。<br /><br />$ACTION “ifup”或“ifdown”<br />$INTERFACE 啟動或停止的介面名"
+"(例如“wan”或“wwan”)<br />$DEVICE 啟動或停止介面的物理裝置名(例"
+"如“eth0”或“wwan0”)<br /><br />"
+
+msgid "This section allows you to modify the contents of /etc/config/mwan3"
+msgstr "這裡允許您修改 /etc/config/mwan3 的內容"
+
+msgid "This section allows you to modify the contents of /etc/config/network"
+msgstr "這裡允許您修改 /etc/config/network 的內容"
+
+msgid "This section allows you to modify the contents of /etc/config/wireless"
+msgstr "這裡允許您修改 /etc/config/wireless 的內容"
+
+msgid "Tracking IP"
+msgstr "跟蹤的 IP"
+
+msgid "Tracking hostname or IP address"
+msgstr "跟蹤的主機或 IP 位址"
+
+msgid "Tracking method"
+msgstr "跟蹤方式"
+
+msgid "Tracking reliability"
+msgstr "跟蹤可靠性"
+
+msgid "Traffic Rules"
+msgstr "流量規則"
+
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"來自相同源 IP 的流量,如果已經匹配過此規則並且在粘滯超時時間內,將會使用相同"
+"的 WAN 介面"
+
+msgid "Troubleshooting"
+msgstr "故障排除"
+
+msgid "Troubleshooting Data"
+msgstr "故障排除資料"
+
+msgid ""
+"Use the IP address of this interface as source IP address for traffic "
+"initiated by the router itself"
+msgstr "使用該介面的 IP 位址作為路由器本身發起的流量的源 IP 位址"
+
+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 "警告:已配置 %d 個介面,超過最大值 250!"
+
+msgid ""
+"WARNING: Some interfaces are configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr "警告:某些介面配置不正確或未配置到 /etc/config/network!"
+
+msgid ""
+"WARNING: Some interfaces have a higher reliability requirement than there "
+"are tracking IP addresses!"
+msgstr "警告:某些介面的跟蹤可靠性要求大於了跟蹤 IP 位址總數!"
+
+msgid ""
+"WARNING: Some interfaces have duplicate metrics configured in /etc/config/"
+"network!"
+msgstr "警告:某些介面在 /etc/config/network 中配置了相同的躍點數!"
+
+msgid ""
+"WARNING: Some interfaces have no default route in the main routing table!"
+msgstr "警告:某些介面在主路由表中沒有預設路由!"
+
+msgid ""
+"WARNING: Some interfaces have no metric configured in /etc/config/network!"
+msgstr "警告:某些介面沒有在 /etc/config/network 中配置躍點數!"
+
+msgid ""
+"WARNING: Some policies have names exceeding the maximum of 15 characters!"
+msgstr "警告:某些策略的名稱超過了 15 個字元!"
+
+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 "警告:此介面和其他介面在 /etc/config/network 中配置了相同的躍點數!"
+
+msgid ""
+"WARNING: This interface has a higher reliability requirement than there are "
+"tracking IP addresses!"
+msgstr "警告:此介面的跟蹤可靠性要求大於了跟蹤 IP 位址總數!"
+
+msgid "WARNING: This interface has no default route in the main routing table!"
+msgstr "警告:此介面在主路由表中沒有預設路由!"
+
+msgid ""
+"WARNING: This interface has no metric configured in /etc/config/network!"
+msgstr "警告:此介面沒有在 /etc/config/network 中配置躍點數!"
+
+msgid ""
+"WARNING: This interface is configured incorrectly or not at all in /etc/"
+"config/network!"
+msgstr "警告:此介面配置不正確或未配置到 /etc/config/network!"
+
+msgid ""
+"WARNING: This policy's name is %d characters exceeding the maximum of 15!"
+msgstr "警告:此策略的名稱具有 %d 個字元,超過了 15 個字元!"
+
+msgid ""
+"WARNING: This rule is incorrectly configured with no or improper protocol "
+"specified! Please configure a specific protocol!"
+msgstr "警告:此規則沒有配置或配置了不正確的協議,請重新指定協議!"
+
+msgid "Waiting for MWAN to %s..."
+msgstr "等待 MWAN %s..."
+
+msgid "Waiting for diagnostic results..."
+msgstr "等待診斷結果..."
+
+msgid "Weight"
+msgstr "比重"
+
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr "當所有策略成員都無法使用的時候,對使用該策略的流量使用這個操作"
+
+msgid "Wireless Config"
+msgstr "無線配置"
+
+msgid "Yes"
+msgstr "是"
+
+msgid "always"
+msgstr "總是"
+
+msgid "blackhole (drop)"
+msgstr "黑洞(丟棄)"
+
+msgid "default (use main routing table)"
+msgstr "預設(使用主路由表)"
+
+msgid "ifdown"
+msgstr "ifdown"
+
+msgid "ifup"
+msgstr "ifup"
+
+msgid "never"
+msgstr "從不"
+
+msgid "restart"
+msgstr "重啟"
+
+msgid "start"
+msgstr "啟動"
+
+msgid "stop"
+msgstr "停止"
+
+msgid "unreachable (reject)"
+msgstr "不可達(拒絕)"
+
+#~ msgid "Restore default hotplug script"
+#~ msgstr "恢復預設的 hotplug 指令碼"
+
+#~ msgid "Restore..."
+#~ msgstr "恢復..."
+
+#~ msgid ""
+#~ "This section allows you to modify the contents of /etc/hotplug.d/iface/16-"
+#~ "mwancustom<br />This is useful for running system commands and/or scripts "
+#~ "based on interface ifup or ifdown hotplug events<br /><br />Notes:<br /"
+#~ ">The first line of the script must be &#34;#!/bin/sh&#34; without "
+#~ "quotes<br />Lines beginning with # are comments and are not executed<br /"
+#~ "><br />Available variables:<br />$ACTION is the hotplug event (ifup, "
+#~ "ifdown)<br />$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 />這可以在接"
+#~ "口 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 等)"
diff --git a/applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak b/applications/luci-app-mwan3/root/etc/hotplug.d/iface/16-mwancustombak
new file mode 100755 (executable)
index 0000000..6e2875e
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+# to enable this script uncomment the case loop at the bottom
+# to report mwan status on interface hotplug ifup/ifdown events modify the lines in the send_alert function
+
+send_alert()
+{
+       # variable "$1" stores the MWAN status information
+       # insert your code here to send the contents of "$1"
+       echo "$1"
+}
+
+gather_event_info()
+{
+       # create event information message
+       local EVENT_INFO="Interface [ "$INTERFACE" ($DEVICE) ] on router [ "$(uci -p /var/state get system.@system[0].hostname)" ] has triggered a hotplug [ "$ACTION" ] event on "$(date +"%a %b %d %Y %T %Z")""
+
+       # get current interface, policy and rule status
+       local CURRENT_STATUS="$(/usr/sbin/mwan3 status)"
+
+       # get last 50 MWAN systemlog messages
+       local MWAN_LOG="$(echo -e "Last 50 MWAN systemlog entries. Newest entries sorted at the top:\n$(logread | grep mwan3 | tail -n 50 | sed 'x;1!H;$!d;x')")"
+
+       # pass event info to send_alert function
+       send_alert "$(echo -e "$EVENT_INFO\n\n$CURRENT_STATUS\n\n$MWAN_LOG")"
+}
+
+#case "$ACTION" in
+#      ifup)
+#              gather_event_info
+#      ;;
+#
+#      ifdown)
+#              gather_event_info
+#      ;;
+#esac
+
+exit 0
diff --git a/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 b/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3
new file mode 100755 (executable)
index 0000000..50c65ad
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh
+
+# replace existing mwan ucitrack entry
+uci -q batch <<-EOF >/dev/null
+       del ucitrack.@mwan3[-1]
+       add ucitrack mwan3
+       set ucitrack.@mwan3[-1].exec="/usr/sbin/mwan3 restart"
+       commit ucitrack
+EOF
+
+uci -q get mwan3.globals >/dev/null || {
+       uci -q add mwan3 globals >/dev/null
+       uci -q rename mwan3.@globals[-1]="globals" >/dev/null
+       uci -q set mwan3.globals.local_source="none" >/dev/null
+       uci commit mwan3
+}
+
+# remove LuCI cache
+rm -rf /tmp/luci-indexcache /tmp/luci-modulecache
+
+exit 0
diff --git a/applications/luci-app-nlbwmon/Makefile b/applications/luci-app-nlbwmon/Makefile
new file mode 100644 (file)
index 0000000..a00177f
--- /dev/null
@@ -0,0 +1,8 @@
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Netlink based bandwidth accounting
+LUCI_DEPENDS:=+nlbwmon
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js b/applications/luci-app-nlbwmon/htdocs/luci-static/resources/nlbw.chart.min.js
new file mode 100644 (file)
index 0000000..34e3026
--- /dev/null
@@ -0,0 +1,68 @@
+(function(){var p=this,l=p.Chart,e=function(a){this.canvas=a.canvas;this.ctx=a;var b=function(a,b){return a["offset"+b]?a["offset"+b]:document.defaultView.getComputedStyle(a).getPropertyValue(b)};this.width=b(a.canvas,"Width")||a.canvas.width;this.height=b(a.canvas,"Height")||a.canvas.height;this.width=a.canvas.width;this.height=a.canvas.height;this.aspectRatio=this.width/this.height;d.retinaScale(this);return this};e.defaults={global:{animation:!0,animationSteps:60,animationEasing:"easeOutQuart",
+showScale:!0,scaleOverride:!1,scaleSteps:null,scaleStepWidth:null,scaleStartValue:null,scaleLineColor:"rgba(0,0,0,.1)",scaleLineWidth:1,scaleShowLabels:!0,scaleLabel:"<%=value%>",scaleIntegersOnly:!0,scaleBeginAtZero:!1,scaleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",scaleFontSize:12,scaleFontStyle:"normal",scaleFontColor:"#666",responsive:!1,maintainAspectRatio:!0,showTooltips:!0,customTooltips:!1,tooltipEvents:["mousemove","touchstart","touchmove","mouseout"],tooltipFillColor:"rgba(0,0,0,0.8)",
+tooltipFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipFontSize:14,tooltipFontStyle:"normal",tooltipFontColor:"#fff",tooltipTitleFontFamily:"'Helvetica Neue', 'Helvetica', 'Arial', sans-serif",tooltipTitleFontSize:14,tooltipTitleFontStyle:"bold",tooltipTitleFontColor:"#fff",tooltipTitleTemplate:"<%= label%>",tooltipYPadding:6,tooltipXPadding:6,tooltipCaretSize:8,tooltipCornerRadius:6,tooltipXOffset:10,tooltipTemplate:"<%if (label){%><%=label%>: <%}%><%= value %>",multiTooltipTemplate:"<%= value %>",
+multiTooltipKeyBackground:"#fff",segmentColorDefault:"#A6CEE3 #1F78B4 #B2DF8A #33A02C #FB9A99 #E31A1C #FDBF6F #FF7F00 #CAB2D6 #6A3D9A #B4B482 #B15928".split(" "),segmentHighlightColorDefaults:"#CEF6FF #47A0DC #DAFFB2 #5BC854 #FFC2C1 #FF4244 #FFE797 #FFA728 #F2DAFE #9265C2 #DCDCAA #D98150".split(" "),onAnimationProgress:function(){},onAnimationComplete:function(){}}};e.types={};var d=e.helpers={},k=d.each=function(a,b,c){var f=Array.prototype.slice.call(arguments,3);if(a)if(a.length===+a.length){var d;
+for(d=0;d<a.length;d++)b.apply(c,[a[d],d].concat(f))}else for(d in a)b.apply(c,[a[d],d].concat(f))},h=d.clone=function(a){var b={};k(a,function(c,f){a.hasOwnProperty(f)&&(b[f]=c)});return b},r=d.extend=function(a){k(Array.prototype.slice.call(arguments,1),function(b){k(b,function(c,f){b.hasOwnProperty(f)&&(a[f]=c)})});return a},I=d.merge=function(a,b){var c=Array.prototype.slice.call(arguments,0);c.unshift({});return r.apply(null,c)},J=d.indexOf=function(a,b){if(Array.prototype.indexOf)return a.indexOf(b);
+for(var c=0;c<a.length;c++)if(a[c]===b)return c;return-1};d.where=function(a,b){var c=[];d.each(a,function(a){b(a)&&c.push(a)});return c};d.findNextWhere=function(a,b,c){c||(c=-1);for(c+=1;c<a.length;c++){var f=a[c];if(b(f))return f}};d.findPreviousWhere=function(a,b,c){c||(c=a.length);for(--c;0<=c;c--){var f=a[c];if(b(f))return f}};var D=d.inherits=function(a){var b=this,c=a&&a.hasOwnProperty("constructor")?a.constructor:function(){return b.apply(this,arguments)},f=function(){this.constructor=c};
+f.prototype=b.prototype;c.prototype=new f;c.extend=D;a&&r(c.prototype,a);c.__super__=b.prototype;return c},A=d.noop=function(){},K=d.uid=function(){var a=0;return function(){return"chart-"+a++}}(),L=d.warn=function(a){window.console&&"function"===typeof window.console.warn&&console.warn(a)},M=d.amd="function"===typeof define&&define.amd,u=d.isNumber=function(a){return!isNaN(parseFloat(a))&&isFinite(a)},y=d.max=function(a){return Math.max.apply(Math,a)},w=d.min=function(a){return Math.min.apply(Math,
+a)};d.cap=function(a,b,c){if(u(b)){if(a>b)return b}else if(u(c)&&a<c)return c;return a};var E=d.getDecimalPlaces=function(a){if(0!==a%1&&u(a)){a=a.toString();if(0>a.indexOf("e-"))return a.split(".")[1].length;if(0>a.indexOf("."))return parseInt(a.split("e-")[1]);a=a.split(".")[1].split("e-");return a[0].length+parseInt(a[1])}return 0},B=d.radians=function(a){return Math.PI/180*a};d.getAngleFromPoint=function(a,b){var c=b.x-a.x,f=b.y-a.y,d=Math.sqrt(c*c+f*f),m=2*Math.PI+Math.atan2(f,c);0>c&&0>f&&(m+=
+2*Math.PI);return{angle:m,distance:d}};var F=d.aliasPixel=function(a){return 0===a%2?0:.5};d.splineCurve=function(a,b,c,f){var d=Math.sqrt(Math.pow(b.x-a.x,2)+Math.pow(b.y-a.y,2)),m=Math.sqrt(Math.pow(c.x-b.x,2)+Math.pow(c.y-b.y,2)),g=f*d/(d+m);f=f*m/(d+m);return{inner:{x:b.x-g*(c.x-a.x),y:b.y-g*(c.y-a.y)},outer:{x:b.x+f*(c.x-a.x),y:b.y+f*(c.y-a.y)}}};var N=d.calculateOrderOfMagnitude=function(a){return Math.floor(Math.log(a)/Math.LN10)};d.calculateScaleRange=function(a,b,c,f,d){b=Math.floor(b/(1.5*
+c));c=2>=b;var m=[];k(a,function(a){null==a||m.push(a)});var g=w(m),e=y(m);e===g&&(e+=.5,.5<=g&&!f?g-=.5:e+=.5);a=N(Math.abs(e-g));f=f?0:Math.floor(g/(1*Math.pow(10,a)))*Math.pow(10,a);for(var e=Math.ceil(e/(1*Math.pow(10,a)))*Math.pow(10,a)-f,g=Math.pow(10,a),n=Math.round(e/g);(n>b||2*n<b)&&!c;)if(n>b)g*=2,n=Math.round(e/g),0!==n%1&&(c=!0);else if(d&&0<=a)if(0===g/2%1)g/=2,n=Math.round(e/g);else break;else g/=2,n=Math.round(e/g);c&&(n=2,g=e/n);return{steps:n,stepValue:g,min:f,max:f+n*g}};var t=d.template=
+function(a,b){if(a instanceof Function)return a(b);var c={},c=/\W/.test(a)?new Function("obj","var p=[],print=function(){p.push.apply(p,arguments);};with(obj){p.push('"+a.replace(/[\r\t\n]/g," ").split("<%").join("\t").replace(/((^|%>)[^\t]*)'/g,"$1\r").replace(/\t=(.*?)%>/g,"',$1,'").split("\t").join("');").split("%>").join("p.push('").split("\r").join("\\'")+"');}return p.join('');"):c[a]=c[a];return b?c(b):c};d.generateLabels=function(a,b,c,f){var d=Array(b);a&&k(d,function(b,e){d[e]=t(a,{value:c+
+f*(e+1)})});return d};var x=d.easingEffects={linear:function(a){return a},easeInQuad:function(a){return a*a},easeOutQuad:function(a){return-1*a*(a-2)},easeInOutQuad:function(a){return 1>(a/=.5)?.5*a*a:-.5*(--a*(a-2)-1)},easeInCubic:function(a){return a*a*a},easeOutCubic:function(a){return 1*((a=a/1-1)*a*a+1)},easeInOutCubic:function(a){return 1>(a/=.5)?.5*a*a*a:.5*((a-=2)*a*a+2)},easeInQuart:function(a){return a*a*a*a},easeOutQuart:function(a){return-1*((a=a/1-1)*a*a*a-1)},easeInOutQuart:function(a){return 1>
+(a/=.5)?.5*a*a*a*a:-.5*((a-=2)*a*a*a-2)},easeInQuint:function(a){return 1*(a/=1)*a*a*a*a},easeOutQuint:function(a){return 1*((a=a/1-1)*a*a*a*a+1)},easeInOutQuint:function(a){return 1>(a/=.5)?.5*a*a*a*a*a:.5*((a-=2)*a*a*a*a+2)},easeInSine:function(a){return-1*Math.cos(a/1*(Math.PI/2))+1},easeOutSine:function(a){return 1*Math.sin(a/1*(Math.PI/2))},easeInOutSine:function(a){return-.5*(Math.cos(Math.PI*a/1)-1)},easeInExpo:function(a){return 0===a?1:1*Math.pow(2,10*(a/1-1))},easeOutExpo:function(a){return 1===
+a?1:1*(-Math.pow(2,-10*a/1)+1)},easeInOutExpo:function(a){return 0===a?0:1===a?1:1>(a/=.5)?.5*Math.pow(2,10*(a-1)):.5*(-Math.pow(2,-10*--a)+2)},easeInCirc:function(a){return 1<=a?a:-1*(Math.sqrt(1-(a/=1)*a)-1)},easeOutCirc:function(a){return 1*Math.sqrt(1-(a=a/1-1)*a)},easeInOutCirc:function(a){return 1>(a/=.5)?-.5*(Math.sqrt(1-a*a)-1):.5*(Math.sqrt(1-(a-=2)*a)+1)},easeInElastic:function(a){var b=1.70158,c=0,f=1;if(0===a)return 0;if(1==(a/=1))return 1;c||(c=.3);f<Math.abs(1)?(f=1,b=c/4):b=c/(2*Math.PI)*
+Math.asin(1/f);return-(f*Math.pow(2,10*--a)*Math.sin(2*(1*a-b)*Math.PI/c))},easeOutElastic:function(a){var b=1.70158,c=0,f=1;if(0===a)return 0;if(1==(a/=1))return 1;c||(c=.3);f<Math.abs(1)?(f=1,b=c/4):b=c/(2*Math.PI)*Math.asin(1/f);return f*Math.pow(2,-10*a)*Math.sin(2*(1*a-b)*Math.PI/c)+1},easeInOutElastic:function(a){var b=1.70158,c=0,f=1;if(0===a)return 0;if(2==(a/=.5))return 1;c||(c=.3*1.5);f<Math.abs(1)?(f=1,b=c/4):b=c/(2*Math.PI)*Math.asin(1/f);return 1>a?-.5*f*Math.pow(2,10*--a)*Math.sin(2*
+(1*a-b)*Math.PI/c):f*Math.pow(2,-10*--a)*Math.sin(2*(1*a-b)*Math.PI/c)*.5+1},easeInBack:function(a){return 1*(a/=1)*a*(2.70158*a-1.70158)},easeOutBack:function(a){return 1*((a=a/1-1)*a*(2.70158*a+1.70158)+1)},easeInOutBack:function(a){var b=1.70158;return 1>(a/=.5)?.5*a*a*(((b*=1.525)+1)*a-b):.5*((a-=2)*a*(((b*=1.525)+1)*a+b)+2)},easeInBounce:function(a){return 1-x.easeOutBounce(1-a)},easeOutBounce:function(a){return(a/=1)<1/2.75?7.5625*a*a:a<2/2.75?1*(7.5625*(a-=1.5/2.75)*a+.75):a<2.5/2.75?1*(7.5625*
+(a-=2.25/2.75)*a+.9375):1*(7.5625*(a-=2.625/2.75)*a+.984375)},easeInOutBounce:function(a){return.5>a?.5*x.easeInBounce(2*a):.5*x.easeOutBounce(2*a-1)+.5}},G=d.requestAnimFrame=function(){return window.requestAnimationFrame||window.webkitRequestAnimationFrame||window.mozRequestAnimationFrame||window.oRequestAnimationFrame||window.msRequestAnimationFrame||function(a){return window.setTimeout(a,1E3/60)}}();d.cancelAnimFrame=function(){return window.cancelAnimationFrame||window.webkitCancelAnimationFrame||
+window.mozCancelAnimationFrame||window.oCancelAnimationFrame||window.msCancelAnimationFrame||function(a){return window.clearTimeout(a,1E3/60)}}();d.animationLoop=function(a,b,c,f,d,e){var g=0,k=x[c]||x.linear,n=function(){g++;var c=g/b,h=k(c);a.call(e,h,c,g);f.call(e,h,c);g<b?e.animationFrame=G(n):d.apply(e)};G(n)};d.getRelativePosition=function(a){var b;b=a.originalEvent||a;var c=(a.currentTarget||a.srcElement).getBoundingClientRect();b.touches?(a=b.touches[0].clientX-c.left,b=b.touches[0].clientY-
+c.top):(a=b.clientX-c.left,b=b.clientY-c.top);return{x:a,y:b}};var O=d.addEvent=function(a,b,c){a.addEventListener?a.addEventListener(b,c):a.attachEvent?a.attachEvent("on"+b,c):a["on"+b]=c},P=d.removeEvent=function(a,b,c){a.removeEventListener?a.removeEventListener(b,c,!1):a.detachEvent?a.detachEvent("on"+b,c):a["on"+b]=A};d.bindEvents=function(a,b,c){a.events||(a.events={});k(b,function(b){a.events[b]=function(){c.apply(a,arguments)};O(a.chart.canvas,b,a.events[b])})};var Q=d.unbindEvents=function(a,
+b){k(b,function(b,f){P(a.chart.canvas,f,b)})},R=d.getMaximumWidth=function(a){a=a.parentNode;var b=parseInt(z(a,"padding-left"))+parseInt(z(a,"padding-right"));return a?a.clientWidth-b:0},S=d.getMaximumHeight=function(a){a=a.parentNode;var b=parseInt(z(a,"padding-bottom"))+parseInt(z(a,"padding-top"));return a?a.clientHeight-b:0},z=d.getStyle=function(a,b){return a.currentStyle?a.currentStyle[b]:document.defaultView.getComputedStyle(a,null).getPropertyValue(b)};d.getMaximumSize=d.getMaximumWidth;
+var T=d.retinaScale=function(a){var b=a.ctx,c=a.canvas.width;a=a.canvas.height;window.devicePixelRatio&&(b.canvas.style.width=c+"px",b.canvas.style.height=a+"px",b.canvas.height=a*window.devicePixelRatio,b.canvas.width=c*window.devicePixelRatio,b.scale(window.devicePixelRatio,window.devicePixelRatio))},U=d.clear=function(a){a.ctx.clearRect(0,0,a.width,a.height)},v=d.fontString=function(a,b,c){return b+" "+a+"px "+c},C=d.longestText=function(a,b,c){a.font=b;var f=0;k(c,function(b){b=a.measureText(b).width;
+f=b>f?b:f});return f},H=d.drawRoundedRectangle=function(a,b,c,f,d,e){a.beginPath();a.moveTo(b+e,c);a.lineTo(b+f-e,c);a.quadraticCurveTo(b+f,c,b+f,c+e);a.lineTo(b+f,c+d-e);a.quadraticCurveTo(b+f,c+d,b+f-e,c+d);a.lineTo(b+e,c+d);a.quadraticCurveTo(b,c+d,b,c+d-e);a.lineTo(b,c+e);a.quadraticCurveTo(b,c,b+e,c);a.closePath()};e.instances={};e.Type=function(a,b,c){this.options=b;this.chart=c;this.id=K();e.instances[this.id]=this;b.responsive&&this.resize();this.initialize.call(this,a)};r(e.Type.prototype,
+{initialize:function(){return this},clear:function(){U(this.chart);return this},stop:function(){e.animationService.cancelAnimation(this);return this},resize:function(a){this.stop();var b=this.chart.canvas,c=R(this.chart.canvas),f=this.options.maintainAspectRatio?c/this.chart.aspectRatio:S(this.chart.canvas);b.width=this.chart.width=c;b.height=this.chart.height=f;T(this.chart);"function"===typeof a&&a.apply(this,Array.prototype.slice.call(arguments,1));return this},reflow:A,render:function(a){a&&this.reflow();
+this.options.animation&&!a?(a=new e.Animation,a.numSteps=this.options.animationSteps,a.easing=this.options.animationEasing,a.render=function(a,c){var f=c.currentStep/c.numSteps,e=(0,d.easingEffects[c.easing])(f);a.draw(e,f,c.currentStep)},a.onAnimationProgress=this.options.onAnimationProgress,a.onAnimationComplete=this.options.onAnimationComplete,e.animationService.addAnimation(this,a)):(this.draw(),this.options.onAnimationComplete.call(this));return this},generateLegend:function(){return t(this.options.legendTemplate,
+this)},destroy:function(){this.clear();Q(this,this.events);var a=this.chart.canvas;a.width=this.chart.width;a.height=this.chart.height;a.style.removeProperty?(a.style.removeProperty("width"),a.style.removeProperty("height")):(a.style.removeAttribute("width"),a.style.removeAttribute("height"));delete e.instances[this.id]},showTooltip:function(a,b){"undefined"===typeof this.activeElements&&(this.activeElements=[]);if(function(a){var b=!1;if(a.length!==this.activeElements.length)return b=!0;k(a,function(a,
+c){a!==this.activeElements[c]&&(b=!0)},this);return b}.call(this,a)||b){this.activeElements=a;this.draw();this.options.customTooltips&&this.options.customTooltips(!1);if(0<a.length)if(this.datasets&&1<this.datasets.length){for(var c,f,q=this.datasets.length-1;0<=q&&(c=this.datasets[q].points||this.datasets[q].bars||this.datasets[q].segments,f=J(c,a[0]),-1===f);q--);var m=[],g=[];c=function(a){var b=[],c,e=[],q=[],k,h,l;d.each(this.datasets,function(a){c=a.points||a.bars||a.segments;c[f]&&c[f].hasValue()&&
+b.push(c[f])});d.each(b,function(a){e.push(a.x);q.push(a.y);m.push(d.template(this.options.multiTooltipTemplate,a));g.push({fill:a._saved.fillColor||a.fillColor,stroke:a._saved.strokeColor||a.strokeColor})},this);l=w(q);k=y(q);h=w(e);a=y(e);return{x:h>this.chart.width/2?h:a,y:(l+k)/2}}.call(this,f);(new e.MultiTooltip({x:c.x,y:c.y,xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,xOffset:this.options.tooltipXOffset,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,
+fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,titleTextColor:this.options.tooltipTitleFontColor,titleFontFamily:this.options.tooltipTitleFontFamily,titleFontStyle:this.options.tooltipTitleFontStyle,titleFontSize:this.options.tooltipTitleFontSize,cornerRadius:this.options.tooltipCornerRadius,labels:m,legendColors:g,legendColorBackground:this.options.multiTooltipKeyBackground,title:t(this.options.tooltipTitleTemplate,a[0]),chart:this.chart,
+ctx:this.chart.ctx,custom:this.options.customTooltips})).draw()}else k(a,function(a){var b=a.tooltipPosition();(new e.Tooltip({x:Math.round(b.x),y:Math.round(b.y),xPadding:this.options.tooltipXPadding,yPadding:this.options.tooltipYPadding,fillColor:this.options.tooltipFillColor,textColor:this.options.tooltipFontColor,fontFamily:this.options.tooltipFontFamily,fontStyle:this.options.tooltipFontStyle,fontSize:this.options.tooltipFontSize,caretHeight:this.options.tooltipCaretSize,cornerRadius:this.options.tooltipCornerRadius,
+text:t(this.options.tooltipTemplate,a),chart:this.chart,custom:this.options.customTooltips})).draw()},this);return this}},toBase64Image:function(){return this.chart.canvas.toDataURL.apply(this.chart.canvas,arguments)}});e.Type.extend=function(a){var b=this,c=function(){return b.apply(this,arguments)};c.prototype=h(b.prototype);r(c.prototype,a);c.extend=e.Type.extend;if(a.name||b.prototype.name){var f=a.name||b.prototype.name,d=e.defaults[b.prototype.name]?h(e.defaults[b.prototype.name]):{};e.defaults[f]=
+r(d,a.defaults);e.types[f]=c;e.prototype[f]=function(a,b){var d=I(e.defaults.global,e.defaults[f],b||{});return new c(a,d,this)}}else L("Name not provided for this chart, so it hasn't been registered");return b};e.Element=function(a){r(this,a);this.initialize.apply(this,arguments);this.save()};r(e.Element.prototype,{initialize:function(){},restore:function(a){a?k(a,function(a){this[a]=this._saved[a]},this):r(this,this._saved);return this},save:function(){this._saved=h(this);delete this._saved._saved;
+return this},update:function(a){k(a,function(a,c){this._saved[c]=this[c];this[c]=a},this);return this},transition:function(a,b){k(a,function(a,f){this[f]=(a-this._saved[f])*b+this._saved[f]},this);return this},tooltipPosition:function(){return{x:this.x,y:this.y}},hasValue:function(){return u(this.value)}});e.Element.extend=D;e.Point=e.Element.extend({display:!0,inRange:function(a,b){return Math.pow(a-this.x,2)+Math.pow(b-this.y,2)<Math.pow(this.hitDetectionRadius+this.radius,2)},draw:function(){if(this.display){var a=
+this.ctx;a.beginPath();a.arc(this.x,this.y,this.radius,0,2*Math.PI);a.closePath();a.strokeStyle=this.strokeColor;a.lineWidth=this.strokeWidth;a.fillStyle=this.fillColor;a.fill();a.stroke()}}});e.Arc=e.Element.extend({inRange:function(a,b){var c=d.getAngleFromPoint(this,{x:a,y:b}),f=c.angle%(2*Math.PI),e=(2*Math.PI+this.startAngle)%(2*Math.PI),m=(2*Math.PI+this.endAngle)%(2*Math.PI)||360,c=c.distance>=this.innerRadius&&c.distance<=this.outerRadius;return(m<e?f<=m||f>=e:f>=e&&f<=m)&&c},tooltipPosition:function(){var a=
+this.startAngle+(this.endAngle-this.startAngle)/2,b=(this.outerRadius-this.innerRadius)/2+this.innerRadius;return{x:this.x+Math.cos(a)*b,y:this.y+Math.sin(a)*b}},draw:function(a){a=this.ctx;a.beginPath();a.arc(this.x,this.y,0>this.outerRadius?0:this.outerRadius,this.startAngle,this.endAngle);a.arc(this.x,this.y,0>this.innerRadius?0:this.innerRadius,this.endAngle,this.startAngle,!0);a.closePath();a.strokeStyle=this.strokeColor;a.lineWidth=this.strokeWidth;a.fillStyle=this.fillColor;a.fill();a.lineJoin=
+"bevel";this.showStroke&&a.stroke()}});e.Rectangle=e.Element.extend({draw:function(){var a=this.ctx,b=this.width/2,c=this.x-b,b=this.x+b,f=this.base-(this.base-this.y),d=this.strokeWidth/2;this.showStroke&&(c+=d,b-=d,f+=d);a.beginPath();a.fillStyle=this.fillColor;a.strokeStyle=this.strokeColor;a.lineWidth=this.strokeWidth;a.moveTo(c,this.base);a.lineTo(c,f);a.lineTo(b,f);a.lineTo(b,this.base);a.fill();this.showStroke&&a.stroke()},height:function(){return this.base-this.y},inRange:function(a,b){return a>=
+this.x-this.width/2&&a<=this.x+this.width/2&&b>=this.y&&b<=this.base}});e.Animation=e.Element.extend({currentStep:null,numSteps:60,easing:"",render:null,onAnimationProgress:null,onAnimationComplete:null});e.Tooltip=e.Element.extend({draw:function(){var a=this.chart.ctx;a.font=v(this.fontSize,this.fontStyle,this.fontFamily);this.xAlign="center";this.yAlign="above";var b=this.caretPadding=2,c=a.measureText(this.text).width+2*this.xPadding,f=this.fontSize+2*this.yPadding,d=f+this.caretHeight+b;this.x+
+c/2>this.chart.width?this.xAlign="left":0>this.x-c/2&&(this.xAlign="right");0>this.y-d&&(this.yAlign="below");var e=this.x-c/2,d=this.y-d;a.fillStyle=this.fillColor;if(this.custom)this.custom(this);else{switch(this.yAlign){case "above":a.beginPath();a.moveTo(this.x,this.y-b);a.lineTo(this.x+this.caretHeight,this.y-(b+this.caretHeight));a.lineTo(this.x-this.caretHeight,this.y-(b+this.caretHeight));a.closePath();a.fill();break;case "below":d=this.y+b+this.caretHeight,a.beginPath(),a.moveTo(this.x,this.y+
+b),a.lineTo(this.x+this.caretHeight,this.y+b+this.caretHeight),a.lineTo(this.x-this.caretHeight,this.y+b+this.caretHeight),a.closePath(),a.fill()}switch(this.xAlign){case "left":e=this.x-c+(this.cornerRadius+this.caretHeight);break;case "right":e=this.x-(this.cornerRadius+this.caretHeight)}H(a,e,d,c,f,this.cornerRadius);a.fill();a.fillStyle=this.textColor;a.textAlign="center";a.textBaseline="middle";a.fillText(this.text,e+c/2,d+f/2)}}});e.MultiTooltip=e.Element.extend({initialize:function(){this.font=
+v(this.fontSize,this.fontStyle,this.fontFamily);this.titleFont=v(this.titleFontSize,this.titleFontStyle,this.titleFontFamily);this.titleHeight=this.title?1.5*this.titleFontSize:0;this.height=this.labels.length*this.fontSize+this.fontSize/2*(this.labels.length-1)+2*this.yPadding+this.titleHeight;this.ctx.font=this.titleFont;var a=this.ctx.measureText(this.title).width,b=C(this.ctx,this.font,this.labels)+this.fontSize+3;this.width=y([b,a])+2*this.xPadding;a=this.height/2;0>this.y-a?this.y=a:this.y+
+a>this.chart.height&&(this.y=this.chart.height-a);this.x=this.x>this.chart.width/2?this.x-(this.xOffset+this.width):this.x+this.xOffset},getLineHeight:function(a){var b=this.y-this.height/2+this.yPadding;return 0===a?b+this.titleHeight/3:b+(1.5*this.fontSize*(a-1)+this.fontSize/2)+this.titleHeight},draw:function(){if(this.custom)this.custom(this);else{H(this.ctx,this.x,this.y-this.height/2,this.width,this.height,this.cornerRadius);var a=this.ctx;a.fillStyle=this.fillColor;a.fill();a.closePath();a.textAlign=
+"left";a.textBaseline="middle";a.fillStyle=this.titleTextColor;a.font=this.titleFont;a.fillText(this.title,this.x+this.xPadding,this.getLineHeight(0));a.font=this.font;d.each(this.labels,function(b,c){a.fillStyle=this.textColor;a.fillText(b,this.x+this.xPadding+this.fontSize+3,this.getLineHeight(c+1));a.fillStyle=this.legendColorBackground;a.fillRect(this.x+this.xPadding,this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize);a.fillStyle=this.legendColors[c].fill;a.fillRect(this.x+this.xPadding,
+this.getLineHeight(c+1)-this.fontSize/2,this.fontSize,this.fontSize)},this)}}});e.Scale=e.Element.extend({initialize:function(){this.fit()},buildYLabels:function(){this.yLabels=[];for(var a=E(this.stepValue),b=0;b<=this.steps;b++)this.yLabels.push(t(this.templateString,{value:(this.min+b*this.stepValue).toFixed(a)}));this.yLabelWidth=this.display&&this.showLabels?C(this.ctx,this.font,this.yLabels)+10:0},addXLabel:function(a){this.xLabels.push(a);this.valuesCount++;this.fit()},removeXLabel:function(){this.xLabels.shift();
+this.valuesCount--;this.fit()},fit:function(){this.startPoint=this.display?this.fontSize:0;this.endPoint=this.display?this.height-1.5*this.fontSize-5:this.height;this.startPoint+=this.padding;var a=this.endPoint-=this.padding,b=this.endPoint-this.startPoint,c;this.calculateYRange(b);this.buildYLabels();for(this.calculateXLabelRotation();b>this.endPoint-this.startPoint;)b=this.endPoint-this.startPoint,c=this.yLabelWidth,this.calculateYRange(b),this.buildYLabels(),c<this.yLabelWidth&&(this.endPoint=
+a,this.calculateXLabelRotation())},calculateXLabelRotation:function(){this.ctx.font=this.font;var a=this.ctx.measureText(this.xLabels[0]).width,b;this.xScalePaddingRight=this.ctx.measureText(this.xLabels[this.xLabels.length-1]).width/2+3;this.xScalePaddingLeft=a/2>this.yLabelWidth?a/2:this.yLabelWidth;this.xLabelRotation=0;if(this.display){var c=C(this.ctx,this.font,this.xLabels),f;this.xLabelWidth=c;for(var d=Math.floor(this.calculateX(1)-this.calculateX(0))-6;this.xLabelWidth>d&&0===this.xLabelRotation||
+this.xLabelWidth>d&&90>=this.xLabelRotation&&0<this.xLabelRotation;)f=Math.cos(B(this.xLabelRotation)),b=f*a,b+this.fontSize/2>this.yLabelWidth&&(this.xScalePaddingLeft=b+this.fontSize/2),this.xScalePaddingRight=this.fontSize/2,this.xLabelRotation++,this.xLabelWidth=f*c;0<this.xLabelRotation&&(this.endPoint-=Math.sin(B(this.xLabelRotation))*c+3)}else this.xLabelWidth=0,this.xScalePaddingLeft=this.xScalePaddingRight=this.padding},calculateYRange:A,drawingArea:function(){return this.startPoint-this.endPoint},
+calculateY:function(a){var b=this.drawingArea()/(this.min-this.max);return this.endPoint-b*(a-this.min)},calculateX:function(a){var b=(this.width-(this.xScalePaddingLeft+this.xScalePaddingRight))/Math.max(this.valuesCount-(this.offsetGridLines?0:1),1);a=b*a+this.xScalePaddingLeft;this.offsetGridLines&&(a+=b/2);return Math.round(a)},update:function(a){d.extend(this,a);this.fit()},draw:function(){var a=this.ctx,b=(this.endPoint-this.startPoint)/this.steps,c=Math.round(this.xScalePaddingLeft);this.display&&
+(a.fillStyle=this.textColor,a.font=this.font,k(this.yLabels,function(f,e){var k=this.endPoint-b*e,g=Math.round(k),h=this.showHorizontalLines;a.textAlign="right";a.textBaseline="middle";this.showLabels&&a.fillText(f,c-10,k);0!==e||h||(h=!0);h&&a.beginPath();0<e?(a.lineWidth=this.gridLineWidth,a.strokeStyle=this.gridLineColor):(a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor);g+=d.aliasPixel(a.lineWidth);h&&(a.moveTo(c,g),a.lineTo(this.width,g),a.stroke(),a.closePath());a.lineWidth=this.lineWidth;
+a.strokeStyle=this.lineColor;a.beginPath();a.moveTo(c-5,g);a.lineTo(c,g);a.stroke();a.closePath()},this),k(this.xLabels,function(b,c){var d=this.calculateX(c)+F(this.lineWidth),e=this.calculateX(c-(this.offsetGridLines?.5:0))+F(this.lineWidth),k=0<this.xLabelRotation,h=this.showVerticalLines;0!==c||h||(h=!0);h&&a.beginPath();0<c?(a.lineWidth=this.gridLineWidth,a.strokeStyle=this.gridLineColor):(a.lineWidth=this.lineWidth,a.strokeStyle=this.lineColor);h&&(a.moveTo(e,this.endPoint),a.lineTo(e,this.startPoint-
+3),a.stroke(),a.closePath());a.lineWidth=this.lineWidth;a.strokeStyle=this.lineColor;a.beginPath();a.moveTo(e,this.endPoint);a.lineTo(e,this.endPoint+5);a.stroke();a.closePath();a.save();a.translate(d,k?this.endPoint+12:this.endPoint+8);a.rotate(-1*B(this.xLabelRotation));a.font=this.font;a.textAlign=k?"right":"center";a.textBaseline=k?"middle":"top";a.fillText(b,0,0);a.restore()},this))}});e.RadialScale=e.Element.extend({initialize:function(){this.size=w([this.height,this.width]);this.drawingArea=
+this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2},calculateCenterOffset:function(a){return this.drawingArea/(this.max-this.min)*(a-this.min)},update:function(){this.lineArc?this.drawingArea=this.display?this.size/2-(this.fontSize/2+this.backdropPaddingY):this.size/2:this.setScaleSize();this.buildYLabels()},buildYLabels:function(){this.yLabels=[];for(var a=E(this.stepValue),b=0;b<=this.steps;b++)this.yLabels.push(t(this.templateString,{value:(this.min+b*this.stepValue).toFixed(a)}))},
+getCircumference:function(){return 2*Math.PI/this.valuesCount},setScaleSize:function(){var a=w([this.height/2-this.pointLabelFontSize-5,this.width/2]),b,c,d,e=this.width,k,g=0,h;this.ctx.font=v(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);for(c=0;c<this.valuesCount;c++)b=this.getPointPosition(c,a),d=this.ctx.measureText(t(this.templateString,{value:this.labels[c]})).width+5,0===c||c===this.valuesCount/2?(d/=2,b.x+d>e&&(e=b.x+d,k=c),b.x-d<g&&(g=b.x-d,h=c)):c<this.valuesCount/
+2?b.x+d>e&&(e=b.x+d,k=c):c>this.valuesCount/2&&b.x-d<g&&(g=b.x-d,h=c);b=g;e=Math.ceil(e-this.width);k=this.getIndexAngle(k);h=this.getIndexAngle(h);k=e/Math.sin(k+Math.PI/2);h=b/Math.sin(h+Math.PI/2);k=u(k)?k:0;h=u(h)?h:0;this.drawingArea=a-(h+k)/2;this.setCenterPoint(h,k)},setCenterPoint:function(a,b){this.xCenter=(a+this.drawingArea+(this.width-b-this.drawingArea))/2;this.yCenter=this.height/2},getIndexAngle:function(a){return 2*Math.PI/this.valuesCount*a-Math.PI/2},getPointPosition:function(a,
+b){var c=this.getIndexAngle(a);return{x:Math.cos(c)*b+this.xCenter,y:Math.sin(c)*b+this.yCenter}},draw:function(){if(this.display){var a=this.ctx;k(this.yLabels,function(b,c){if(0<c){var d=this.drawingArea/this.steps*c,e=this.yCenter-d;if(0<this.lineWidth){a.strokeStyle=this.lineColor;a.lineWidth=this.lineWidth;if(this.lineArc)a.beginPath(),a.arc(this.xCenter,this.yCenter,d,0,2*Math.PI);else{a.beginPath();for(var f=0;f<this.valuesCount;f++)d=this.getPointPosition(f,this.calculateCenterOffset(this.min+
+c*this.stepValue)),0===f?a.moveTo(d.x,d.y):a.lineTo(d.x,d.y)}a.closePath();a.stroke()}this.showLabels&&(a.font=v(this.fontSize,this.fontStyle,this.fontFamily),this.showLabelBackdrop&&(d=a.measureText(b).width,a.fillStyle=this.backdropColor,a.fillRect(this.xCenter-d/2-this.backdropPaddingX,e-this.fontSize/2-this.backdropPaddingY,d+2*this.backdropPaddingX,this.fontSize+2*this.backdropPaddingY)),a.textAlign="center",a.textBaseline="middle",a.fillStyle=this.fontColor,a.fillText(b,this.xCenter,e))}},this);
+if(!this.lineArc){a.lineWidth=this.angleLineWidth;a.strokeStyle=this.angleLineColor;for(var b=this.valuesCount-1;0<=b;b--){var c=null,d=null;0<this.angleLineWidth&&(c=this.calculateCenterOffset(this.max),d=this.getPointPosition(b,c),a.beginPath(),a.moveTo(this.xCenter,this.yCenter),a.lineTo(d.x,d.y),a.stroke(),a.closePath());if(this.backgroundColors&&this.backgroundColors.length==this.valuesCount){null==c&&(c=this.calculateCenterOffset(this.max));null==d&&(d=this.getPointPosition(b,c));var e=this.getPointPosition(0===
+b?this.valuesCount-1:b-1,c),h=this.getPointPosition(b===this.valuesCount-1?0:b+1,c),c=(e.x+d.x)/2,e=(e.y+d.y)/2,g=(d.x+h.x)/2,h=(d.y+h.y)/2;a.beginPath();a.moveTo(this.xCenter,this.yCenter);a.lineTo(c,e);a.lineTo(d.x,d.y);a.lineTo(g,h);a.fillStyle=this.backgroundColors[b];a.fill();a.closePath()}d=this.getPointPosition(b,this.calculateCenterOffset(this.max)+5);a.font=v(this.pointLabelFontSize,this.pointLabelFontStyle,this.pointLabelFontFamily);a.fillStyle=this.pointLabelFontColor;e=this.labels.length;
+c=this.labels.length/2;g=c/2;h=b<g||b>e-g;e=b===g||b===e-g;a.textAlign=0===b?"center":b===c?"center":b<c?"left":"right";a.textBaseline=e?"middle":h?"bottom":"top";a.fillText(this.labels[b],d.x,d.y)}}}}});e.animationService={frameDuration:17,animations:[],dropFrames:0,addAnimation:function(a,b){for(var c=0;c<this.animations.length;++c)if(this.animations[c].chartInstance===a){this.animations[c].animationObject=b;return}this.animations.push({chartInstance:a,animationObject:b});1==this.animations.length&&
+d.requestAnimFrame.call(window,this.digestWrapper)},cancelAnimation:function(a){var b=d.findNextWhere(this.animations,function(b){return b.chartInstance===a});b&&this.animations.splice(b,1)},digestWrapper:function(){e.animationService.startDigest.call(e.animationService)},startDigest:function(){var a=Date.now(),b=0;1<this.dropFrames&&(b=Math.floor(this.dropFrames),this.dropFrames-=b);for(var c=0;c<this.animations.length;c++)null===this.animations[c].animationObject.currentStep&&(this.animations[c].animationObject.currentStep=
+0),this.animations[c].animationObject.currentStep+=1+b,this.animations[c].animationObject.currentStep>this.animations[c].animationObject.numSteps&&(this.animations[c].animationObject.currentStep=this.animations[c].animationObject.numSteps),this.animations[c].animationObject.render(this.animations[c].chartInstance,this.animations[c].animationObject),this.animations[c].animationObject.currentStep==this.animations[c].animationObject.numSteps&&(this.animations[c].animationObject.onAnimationComplete.call(this.animations[c].chartInstance),
+this.animations.splice(c,1),c--);a=(Date.now()-a-this.frameDuration)/this.frameDuration;1<a&&(this.dropFrames+=a);0<this.animations.length&&d.requestAnimFrame.call(window,this.digestWrapper)}};d.addEvent(window,"resize",function(){var a;return function(){clearTimeout(a);a=setTimeout(function(){k(e.instances,function(a){a.options.responsive&&a.resize(a.render,!0)})},50)}}());M?define(function(){return e}):"object"===typeof module&&module.exports&&(module.exports=e);p.Chart=e;e.noConflict=function(){p.Chart=
+l;return e}}).call(this);
+(function(){var p=this.Chart,l=p.helpers,e={segmentShowStroke:!0,segmentStrokeColor:"#fff",segmentStrokeWidth:2,percentageInnerCutout:50,animationSteps:100,animationEasing:"easeOutBounce",animateRotate:!0,animateScale:!1,legendTemplate:'<ul class="<%=name.toLowerCase()%>-legend"><% for (var i=0; i<segments.length; i++){%><li><span style="background-color:<%=segments[i].fillColor%>"><%if(segments[i].label){%><%=segments[i].label%><%}%></span></li><%}%></ul>'};p.Type.extend({name:"Doughnut",defaults:e,
+initialize:function(d){this.segments=[];this.outerRadius=(l.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2;this.SegmentArc=p.Arc.extend({ctx:this.chart.ctx,x:this.chart.width/2,y:this.chart.height/2});this.options.showTooltips&&l.bindEvents(this,this.options.tooltipEvents,function(d){d="mouseout"!==d.type?this.getSegmentsAtEvent(d):[];l.each(this.segments,function(d){d.restore(["fillColor"])});l.each(d,function(d){d.fillColor=d.highlightColor});this.showTooltip(d)});
+this.calculateTotal(d);l.each(d,function(e,h){e.color||(e.color="hsl("+360*h/d.length+", 100%, 50%)");this.addData(e,h,!0)},this);this.render()},getSegmentsAtEvent:function(d){var e=[],h=l.getRelativePosition(d);l.each(this.segments,function(d){d.inRange(h.x,h.y)&&e.push(d)},this);return e},addData:function(d,e,h){e=void 0!==e?e:this.segments.length;"undefined"===typeof d.color&&(d.color=p.defaults.global.segmentColorDefault[e%p.defaults.global.segmentColorDefault.length],d.highlight=p.defaults.global.segmentHighlightColorDefaults[e%
+p.defaults.global.segmentHighlightColorDefaults.length]);this.segments.splice(e,0,new this.SegmentArc({value:d.value,outerRadius:this.options.animateScale?0:this.outerRadius,innerRadius:this.options.animateScale?0:this.outerRadius/100*this.options.percentageInnerCutout,fillColor:d.color,highlightColor:d.highlight||d.color,showStroke:this.options.segmentShowStroke,strokeWidth:this.options.segmentStrokeWidth,strokeColor:this.options.segmentStrokeColor,startAngle:1.5*Math.PI,circumference:this.options.animateRotate?
+0:this.calculateCircumference(d.value),label:d.label}));h||(this.reflow(),this.update())},calculateCircumference:function(d){return 0<this.total?d/this.total*Math.PI*2:0},calculateTotal:function(d){this.total=0;l.each(d,function(d){this.total+=Math.abs(d.value)},this)},update:function(){this.calculateTotal(this.segments);l.each(this.activeElements,function(d){d.restore(["fillColor"])});l.each(this.segments,function(d){d.save()});this.render()},removeData:function(d){d=l.isNumber(d)?d:this.segments.length-
+1;this.segments.splice(d,1);this.reflow();this.update()},reflow:function(){l.extend(this.SegmentArc.prototype,{x:this.chart.width/2,y:this.chart.height/2});this.outerRadius=(l.min([this.chart.width,this.chart.height])-this.options.segmentStrokeWidth/2)/2;l.each(this.segments,function(d){d.update({outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout})},this)},draw:function(d){var e=d?d:1;this.clear();l.each(this.segments,function(d,l){d.transition({circumference:this.calculateCircumference(d.value),
+outerRadius:this.outerRadius,innerRadius:this.outerRadius/100*this.options.percentageInnerCutout},e);d.endAngle=d.startAngle+d.circumference;d.draw();0===l&&(d.startAngle=1.5*Math.PI);l<this.segments.length-1&&(this.segments[l+1].startAngle=d.endAngle)},this)}});p.types.Doughnut.extend({name:"Pie",defaults:l.merge(e,{percentageInnerCutout:0})})}).call(this);
diff --git a/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua b/applications/luci-app-nlbwmon/luasrc/controller/nlbw.lua
new file mode 100644 (file)
index 0000000..bb56bc6
--- /dev/null
@@ -0,0 +1,225 @@
+-- Copyright 2017 Jo-Philipp Wich <jo@mein.io>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.nlbw", package.seeall)
+
+function index()
+       entry({"admin", "nlbw"}, firstchild(), _("Bandwidth Monitor"), 80)
+       entry({"admin", "nlbw", "display"}, template("nlbw/display"), _("Display"), 1)
+       entry({"admin", "nlbw", "config"}, cbi("nlbw/config"), _("Configuration"), 2)
+       entry({"admin", "nlbw", "backup"}, template("nlbw/backup"), _("Backup"), 3)
+       entry({"admin", "nlbw", "data"}, call("action_data"), nil, 4)
+       entry({"admin", "nlbw", "list"}, call("action_list"), nil, 5)
+       entry({"admin", "nlbw", "ptr"}, call("action_ptr"), nil, 6).leaf = true
+       entry({"admin", "nlbw", "download"}, call("action_download"), nil, 7)
+       entry({"admin", "nlbw", "restore"}, post("action_restore"), nil, 8)
+       entry({"admin", "nlbw", "commit"}, call("action_commit"), nil, 9)
+end
+
+local function exec(cmd, args, writer)
+       local os = require "os"
+       local nixio = require "nixio"
+
+       local fdi, fdo = nixio.pipe()
+       local pid = nixio.fork()
+
+       if pid > 0 then
+               fdo:close()
+
+               while true do
+                       local buffer = fdi:read(2048)
+                       local wpid, stat, code = nixio.waitpid(pid, "nohang")
+
+                       if writer and buffer and #buffer > 0 then
+                               writer(buffer)
+                       end
+
+                       if wpid and stat == "exited" then
+                               break
+                       end
+               end
+       elseif pid == 0 then
+               nixio.dup(fdo, nixio.stdout)
+               fdi:close()
+               fdo:close()
+               nixio.exece(cmd, args, nil)
+               nixio.stdout:close()
+               os.exit(1)
+       end
+end
+
+function action_data()
+       local http = require "luci.http"
+
+       local types = {
+               csv = "text/csv",
+               json = "application/json"
+       }
+
+       local args = { }
+       local mtype = http.formvalue("type") or "json"
+       local delim = http.formvalue("delim") or ";"
+       local period = http.formvalue("period")
+       local group_by = http.formvalue("group_by")
+       local order_by = http.formvalue("order_by")
+
+       if types[mtype] then
+               args[#args+1] = "-c"
+               args[#args+1] = mtype
+       else
+               http.status(400, "Unsupported type")
+               return
+       end
+
+       if delim and #delim > 0 then
+               args[#args+1] = "-s%s" % delim
+       end
+
+       if period and #period > 0 then
+               args[#args+1] = "-t"
+               args[#args+1] = period
+       end
+
+       if group_by and #group_by > 0 then
+               args[#args+1] = "-g"
+               args[#args+1] = group_by
+       end
+
+       if order_by and #order_by > 0 then
+               args[#args+1] = "-o"
+               args[#args+1] = order_by
+       end
+
+       http.prepare_content(types[mtype])
+       exec("/usr/sbin/nlbw", args, http.write)
+end
+
+function action_list()
+       local http = require "luci.http"
+
+       local fd = io.popen("/usr/sbin/nlbw -c list")
+       local periods = { }
+
+       if fd then
+               while true do
+                       local period = fd:read("*l")
+
+                       if not period then
+                               break
+                       end
+
+                       periods[#periods+1] = period
+               end
+
+               fd:close()
+       end
+
+       http.prepare_content("application/json")
+       http.write_json(periods)
+end
+
+function action_ptr(...)
+       local http = require "luci.http"
+       local util = require "luci.util"
+
+       http.prepare_content("application/json")
+       http.write_json(util.ubus("network.rrdns", "lookup", {
+               addrs = {...}, timeout = 3000
+       }))
+end
+
+function action_download()
+       local nixio = require "nixio"
+       local http = require "luci.http"
+       local sys = require "luci.sys"
+       local uci = require "luci.model.uci".cursor()
+
+       local dir = uci:get_first("nlbwmon", "nlbwmon", "database_directory")
+               or "/var/lib/nlbwmon"
+
+       if dir and nixio.fs.stat(dir, "type") == "dir" then
+               local n = "nlbwmon-backup-%s-%s.tar.gz"
+                       %{ sys.hostname(), os.date("%Y-%m-%d") }
+
+               http.prepare_content("application/octet-stream")
+               http.header("Content-Disposition", "attachment; filename=\"%s\"" % n)
+               exec("/bin/tar", { "-C", dir, "-c", "-z", ".", "-f", "-" }, http.write)
+       else
+               http.status(500, "Unable to find database directory")
+       end
+end
+
+function action_restore()
+       local nixio = require "nixio"
+       local http = require "luci.http"
+       local i18n = require "luci.i18n"
+       local tpl = require "luci.template"
+       local uci = require "luci.model.uci".cursor()
+
+       local tmp = "/tmp/nlbw-restore.tar.gz"
+       local dir = uci:get_first("nlbwmon", "nlbwmon", "database_directory")
+               or "/var/lib/nlbwmon"
+
+       local fp
+       http.setfilehandler(
+               function(meta, chunk, eof)
+                       if not fp and meta and meta.name == "archive" then
+                               fp = io.open(tmp, "w")
+                       end
+                       if fp and chunk then
+                               fp:write(chunk)
+                       end
+                       if fp and eof then
+                               fp:close()
+                       end
+               end)
+
+       local files = { }
+       local tar = io.popen("/bin/tar -tzf %s" % tmp, "r")
+       if tar then
+               while true do
+                       local file = tar:read("*l")
+                       if not file then
+                               break
+                       elseif file:match("^%d%d%d%d%d%d%d%d%.db%.gz$") or
+                              file:match("^%./%d%d%d%d%d%d%d%d%.db%.gz$") then
+                               files[#files+1] = file
+                       end
+               end
+               tar:close()
+       end
+
+       if #files == 0 then
+               http.status(500, "Internal Server Error")
+               tpl.render("nlbw/backup", {
+                       message = i18n.translate("Invalid or empty backup archive")
+               })
+               return
+       end
+
+
+       local output = { }
+
+       exec("/etc/init.d/nlbwmon", { "stop" })
+       exec("/bin/mkdir", { "-p", dir })
+
+       exec("/bin/tar", { "-C", dir, "-vxzf", tmp, unpack(files) },
+               function(chunk) output[#output+1] = chunk:match("%S+") end)
+
+       exec("/bin/rm", { "-f", tmp })
+       exec("/etc/init.d/nlbwmon", { "start" })
+
+       tpl.render("nlbw/backup", {
+               message = i18n.translatef(
+                       "The following database files have been restored: %s",
+                       table.concat(output, ", "))
+       })
+end
+
+function action_commit()
+       local http = require "luci.http"
+       local disp = require "luci.dispatcher"
+
+       http.redirect(disp.build_url("admin/nlbw/display"))
+       exec("/usr/sbin/nlbw", { "-c", "commit" })
+end
diff --git a/applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua b/applications/luci-app-nlbwmon/luasrc/model/cbi/nlbw/config.lua
new file mode 100644 (file)
index 0000000..71e096c
--- /dev/null
@@ -0,0 +1,215 @@
+-- Copyright 2017 Jo-Philipp Wich <jo@mein.io>
+-- Licensed to the public under the Apache License 2.0.
+
+local utl = require "luci.util"
+local sys = require "luci.sys"
+local fs  = require "nixio.fs"
+local ip  = require "luci.ip"
+local nw  = require "luci.model.network"
+
+local s, m, period, warning, date, days, interval, ifaces, subnets, limit, prealloc, compress, generations, commit, refresh, directory, protocols
+
+m = Map("nlbwmon", translate("Netlink Bandwidth Monitor - Configuration"),
+       translate("The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic accounting program keeping track of bandwidth usage per host and protocol."))
+
+nw.init(luci.model.uci.cursor_state())
+
+s = m:section(TypedSection, "nlbwmon")
+s.anonymous = true
+s.addremove = false
+s:tab("general", translate("General Settings"))
+s:tab("advanced", translate("Advanced Settings"))
+s:tab("protocol", translate("Protocol Mapping"),
+       translate("Protocol mappings to distinguish traffic types per host, one mapping per line. The first value specifies the IP protocol, the second value the port number and the third column is the name of the mapped protocol."))
+
+period = s:taboption("general", ListValue, "_period", translate("Accounting period"),
+       translate("Choose \"Day of month\" to restart the accounting period monthly on a specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the accounting period exactly every N days, beginning at a given date."))
+
+period:value("relative", translate("Day of month"))
+period:value("absolute", translate("Fixed interval"))
+
+period.write = function(self, cfg, val)
+       if period:formvalue(cfg) == "relative" then
+               m:set(cfg, "database_interval", interval:formvalue(cfg))
+       else
+               m:set(cfg, "database_interval", "%s/%s" %{
+                       date:formvalue(cfg),
+                       days:formvalue(cfg)
+               })
+       end
+end
+
+period.cfgvalue = function(self, cfg)
+       local val = m:get(cfg, "database_interval") or ""
+       if val:match("^%d%d%d%d%-%d%d%-%d%d/%d+$") then
+               return "absolute"
+       end
+       return "relative"
+end
+
+
+warning = s:taboption("general", DummyValue, "_warning", translate("Warning"))
+warning.default = translatef("Changing the accounting interval type will invalidate existing databases!<br /><strong><a href=\"%s\">Download backup</a></strong>.", luci.dispatcher.build_url("admin/nlbw/backup"))
+warning.rawhtml = true
+
+if (m.uci:get_first("nlbwmon", "nlbwmon", "database_interval") or ""):match("^%d%d%d%d-%d%d-%d%d/%d+$") then
+       warning:depends("_period", "relative")
+else
+       warning:depends("_period", "absolute")
+end
+
+
+interval = s:taboption("general", Value, "_interval", translate("Due date"),
+       translate("Day of month to restart the accounting period. Use negative values to count towards the end of month, e.g. \"-5\" to specify the 27th of July or the 24th of Februrary."))
+
+interval.datatype = "or(range(1,31),range(-31,-1))"
+interval.placeholder = "1"
+interval:value("1", translate("1 - Restart every 1st of month"))
+interval:value("-1", translate("-1 - Restart every last day of month"))
+interval:value("-7", translate("-7 - Restart a week before end of month"))
+interval.rmempty = false
+interval:depends("_period", "relative")
+interval.write = period.write
+
+interval.cfgvalue = function(self, cfg)
+       local val = m:get(cfg, "database_interval")
+       return val and tonumber(val)
+end
+
+
+date = s:taboption("general", Value, "_date", translate("Start date"),
+       translate("Start date of the first accounting period, e.g. begin of ISP contract."))
+
+date.datatype = "dateyyyymmdd"
+date.placeholder = "2016-03-15"
+date.rmempty = false
+date:depends("_period", "absolute")
+date.write = period.write
+
+date.cfgvalue = function(self, cfg)
+       local val = m:get(cfg, "database_interval") or ""
+       return (val:match("^(%d%d%d%d%-%d%d%-%d%d)/%d+$"))
+end
+
+
+days = s:taboption("general", Value, "_days", translate("Interval"),
+       translate("Length of accounting interval in days."))
+
+days.datatype = "min(1)"
+days.placeholder = "30"
+days.rmempty = false
+days:depends("_period", "absolute")
+days.write = period.write
+
+days.cfgvalue = function(self, cfg)
+       local val = m:get(cfg, "database_interval") or ""
+       return (val:match("^%d%d%d%d%-%d%d%-%d%d/(%d+)$"))
+end
+
+
+ifaces = s:taboption("general", Value, "_ifaces", translate("Local interfaces"),
+       translate("Only conntrack streams from or to any of these networks are counted."))
+
+ifaces.template = "cbi/network_netlist"
+ifaces.widget = "checkbox"
+ifaces.nocreate = true
+
+ifaces.cfgvalue = function(self, cfg)
+       return m:get(cfg, "local_network")
+end
+
+ifaces.write = function(self, cfg)
+       local item
+       local items = {}
+       for item in utl.imatch(subnets:formvalue(cfg)) do
+               items[#items+1] = item
+       end
+       for item in utl.imatch(ifaces:formvalue(cfg)) do
+               items[#items+1] = item
+       end
+       m:set(cfg, "local_network", items)
+end
+
+
+subnets = s:taboption("general", DynamicList, "_subnets", translate("Local subnets"),
+       translate("Only conntrack streams from or to any of these subnets are counted."))
+
+subnets.datatype = "ipaddr"
+
+subnets.cfgvalue = function(self, cfg)
+       local subnet
+       local subnets = {}
+       for subnet in utl.imatch(m:get(cfg, "local_network")) do
+               subnet = ip.new(subnet)
+               subnets[#subnets+1] = subnet and subnet:string()
+       end
+       return subnets
+end
+
+subnets.write = ifaces.write
+
+
+limit = s:taboption("advanced", Value, "database_limit", translate("Maximum entries"),
+       translate("The maximum amount of entries that should be put into the database, setting the limit to 0 will allow databases to grow indefinitely."))
+
+limit.datatype = "uinteger"
+limit.placeholder = "10000"
+
+prealloc = s:taboption("advanced", Flag, "database_prealloc", translate("Preallocate database"),
+       translate("Whether to preallocate the maximum possible database size in memory. This is mainly useful for memory constrained systems which might not be able to satisfy memory allocation after longer uptime periods."))
+
+prealloc:depends({["database_limit"] = "0", ["!reverse"] = true })
+
+
+compress = s:taboption("advanced", Flag, "database_compress", translate("Compress database"),
+       translate("Whether to gzip compress archive databases. Compressing the database files makes accessing old data slightly slower but helps to reduce storage requirements."))
+
+compress.default = compress.enabled
+
+
+generations = s:taboption("advanced", Value, "database_generations", translate("Stored periods"),
+       translate("Maximum number of accounting periods to keep, use zero to keep databases forever."))
+
+generations.datatype = "uinteger"
+generations.placeholder = "10"
+
+
+commit = s:taboption("advanced", Value, "commit_interval", translate("Commit interval"),
+       translate("Interval at which the temporary in-memory database is committed to the persistent database directory."))
+
+commit.placeholder = "24h"
+commit:value("24h", translate("24h - least flash wear at the expense of data loss risk"))
+commit:value("12h", translate("12h - compromise between risk of data loss and flash wear"))
+commit:value("10m", translate("10m - frequent commits at the expense of flash wear"))
+commit:value("60s", translate("60s - commit minutely, useful for non-flash storage"))
+
+
+refresh = s:taboption("advanced", Value, "refresh_interval", translate("Refresh interval"),
+       translate("Interval at which traffic counters of still established connections are refreshed from netlink information."))
+
+refresh.placeholder = "30s"
+refresh:value("30s", translate("30s - refresh twice per minute for reasonably current stats"))
+refresh:value("5m", translate("5m - rarely refresh to avoid frequently clearing conntrack counters"))
+
+
+directory = s:taboption("advanced", Value, "database_directory", translate("Database directory"),
+       translate("Database storage directory. One file per accounting period will be placed into this directory."))
+
+directory.placeholder = "/var/lib/nlbwmon"
+
+
+protocols = s:taboption("protocol", TextValue, "_protocols")
+protocols.rows = 50
+
+protocols.cfgvalue = function(self, cfg)
+       return fs.readfile("/usr/share/nlbwmon/protocols")
+end
+
+protocols.write = function(self, cfg, value)
+       fs.writefile("/usr/share/nlbwmon/protocols", (value or ""):gsub("\r\n", "\n"))
+end
+
+protocols.remove = protocols.write
+
+
+return m
diff --git a/applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm b/applications/luci-app-nlbwmon/luasrc/view/nlbw/backup.htm
new file mode 100644 (file)
index 0000000..ea2e0f0
--- /dev/null
@@ -0,0 +1,34 @@
+<%#
+ Copyright 2017 Jo-Philipp Wich <jo@mein.io>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+
+<h2 name="content"><%:Netlink Bandwidth Monitor - Backup / Restore %></h2>
+
+<fieldset class="cbi-section">
+       <legend><%:Restore Database Backup%></legend>
+       <p>
+               <form method="POST" action="<%=url("admin/nlbw/restore")%>" enctype="multipart/form-data">
+                       <input type="hidden" name="token" value="<%=token%>" />
+                       <input type="file" name="archive" accept="application/gzip,.gz" />
+                       <input type="submit" value="<%:Restore%>" class="cbi-button cbi-button-apply" />
+               </form>
+
+               <% if message then %>
+                       <div class="alert-message"><%=message%></div>
+               <% end %>
+       </p>
+
+       <legend><%:Download Database Backup%></legend>
+       <p>
+               <form method="GET" action="<%=url("admin/nlbw/download")%>">
+                       <input type="submit" value="<%:Generate Backup%>" class="cbi-button cbi-button-link" />
+               </form>
+       </p>
+</fieldset>
+
+<%+footer%>
diff --git a/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm b/applications/luci-app-nlbwmon/luasrc/view/nlbw/display.htm
new file mode 100644 (file)
index 0000000..932c884
--- /dev/null
@@ -0,0 +1,1052 @@
+<%#
+ Copyright 2017 Jo-Philipp Wich <jo@mein.io>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<% css = [[
+
+       #chartjs-tooltip {
+               opacity: 0;
+               position: absolute;
+               background: rgba(0, 0, 0, .7);
+               color: white;
+               padding: 3px;
+               border-radius: 3px;
+               -webkit-transition: all .1s ease;
+               transition: all .1s ease;
+               pointer-events: none;
+               -webkit-transform: translate(-50%, 0);
+               transform: translate(-50%, 0);
+               z-index: 200;
+       }
+
+       #chartjs-tooltip.above {
+               -webkit-transform: translate(-50%, -100%);
+               transform: translate(-50%, -100%);
+       }
+
+       #chartjs-tooltip.above:before {
+               border: solid;
+               border-color: #111 transparent;
+               border-color: rgba(0, 0, 0, .8) transparent;
+               border-width: 8px 8px 0 8px;
+               bottom: 1em;
+               content: "";
+               display: block;
+               left: 50%;
+               top: 100%;
+               position: absolute;
+               z-index: 99;
+               -webkit-transform: translate(-50%, 0);
+               transform: translate(-50%, 0);
+       }
+
+       table {
+               border: 1px solid #999;
+               border-collapse: collapse;
+               margin: 0 0 2px !important;
+       }
+
+       th, td, table table td {
+               border: 1px solid #999;
+               text-align: right;
+               padding: 1px 3px !important;
+               white-space: nowrap;
+       }
+
+       tbody td {
+               border-bottom-color: #ccc;
+       }
+
+       tbody td[rowspan] {
+               border-bottom-color: #999;
+       }
+
+       tbody tr:last-child td {
+               border-bottom-color: #999;
+       }
+
+
+       .pie {
+               width: 200px;
+               display: inline-block;
+               margin: 20px;
+       }
+
+       .pie label {
+               font-weight: bold;
+               font-size: 14px;
+               display: block;
+               margin-bottom: 10px;
+               text-align: center;
+       }
+
+       .kpi {
+               display: inline-block;
+               margin: 80px 20px 20px;
+               vertical-align: top;
+       }
+
+       .kpi ul {
+               list-style: none;
+       }
+
+       .kpi li {
+               margin: 10px;
+               display: none;
+       }
+
+       .kpi big {
+               font-weight: bold;
+       }
+
+       #detail-bubble {
+               position: absolute;
+               opacity: 0;
+               visibility: hidden;
+       }
+
+       #detail-bubble.in {
+               opacity: 1;
+               visibility: visible;
+               transition: opacity 0.5s;
+       }
+
+       #detail-bubble > div {
+               border: 1px solid #ccc;
+               border-radius: 2px;
+               padding: 5px;
+               background: #fcfcfc;
+       }
+
+       #detail-bubble .head {
+               text-align: center;
+               white-space: nowrap;
+               position: relative;
+       }
+
+       #detail-bubble .head .dismiss {
+               top: 0;
+               right: 0;
+               width: 20px;
+               line-height: 20px;
+               text-align: center;
+               text-decoration: none;
+               font-weight: bold;
+               color: #000;
+               position: absolute;
+               font-size: 20px;
+       }
+
+       #detail-bubble .pie {
+               width: 100px;
+               margin: 5px;
+       }
+
+       #detail-bubble .kpi {
+               margin: 40px 5px 5px;
+               font-size: smaller;
+               text-align: left;
+       }
+
+       #detail-bubble .kpi ul {
+               margin: 0;
+       }
+
+       #bubble-arrow {
+               border: 1px solid #ccc;
+               border-width: 1px 0 0 1px;
+               background: #fcfcfc;
+               width: 15px;
+               height: 15px;
+               position: absolute;
+               left: 0;
+               top: -8px;
+               transform: rotate(45deg);
+               margin: 0 0 0 -8px;
+       }
+
+       tr.active > td {
+               border-bottom: 2px solid red;
+       }
+
+       tr.active > td.active {
+               border: 2px solid red;
+               border-bottom: none;
+       }
+
+       td.detail {
+               border: 2px solid red;
+               border-top: none;
+               opacity: 0;
+               transition: opacity 0.5s;
+       }
+
+       td.detail.in {
+               opacity: 1;
+       }
+
+       th.hostname,
+       td.hostname {
+               text-align: left;
+       }
+
+]] -%>
+
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript" src="<%=resource%>/nlbw.chart.min.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+var chartRegistry = {},
+       trafficPeriods = [],
+       trafficData = { columns: [], data: [] },
+       hostNames = {},
+       hostInfo = <%=luci.util.serialize_json(luci.sys.net.host_hints())%>,
+       ouiData = [];
+
+
+function off(elem)
+{
+       var val = [0, 0];
+       do {
+               if (!isNaN(elem.offsetLeft) && !isNaN(elem.offsetTop)) {
+                       val[0] += elem.offsetLeft;
+                       val[1] += elem.offsetTop;
+               }
+       }
+       while ((elem = elem.offsetParent) != null);
+       return val;
+}
+
+Chart.defaults.global.customTooltips = function(tooltip) {
+       var tooltipEl = document.getElementById('chartjs-tooltip');
+
+       if (!tooltipEl) {
+               tooltipEl = document.createElement('div');
+               tooltipEl.setAttribute('id', 'chartjs-tooltip');
+               document.body.appendChild(tooltipEl);
+       }
+
+       if (!tooltip) {
+               if (tooltipEl.row)
+                       tooltipEl.row.style.backgroundColor = '';
+
+               tooltipEl.style.opacity = 0;
+               return;
+       }
+
+       var pos = off(tooltip.chart.canvas);
+
+       tooltipEl.className = tooltip.yAlign;
+       tooltipEl.innerHTML = tooltip.text[0];
+
+       tooltipEl.style.opacity = 1;
+       tooltipEl.style.left = pos[0] + tooltip.x + 'px';
+       tooltipEl.style.top = pos[1] + tooltip.y - tooltip.caretHeight - tooltip.caretPadding + 'px';
+
+       var row = tooltip.text[1],
+           hue = tooltip.text[2];
+
+       if (row && !isNaN(hue)) {
+               row.style.backgroundColor = 'hsl(%u, 100%%, 80%%)'.format(hue);
+               tooltipEl.row = row;
+       }
+};
+
+Chart.defaults.global.tooltipFontSize = 10;
+Chart.defaults.global.tooltipTemplate = function(tip) {
+       tip.label[0] = tip.label[0].format(tip.value);
+       return tip.label;
+};
+
+function kpi(id, val1, val2, val3)
+{
+       var e = document.getElementById(id);
+
+       if (val1 && val2 && val3)
+               e.innerHTML = '<%:%s, %s and %s%>'.format(val1, val2, val3);
+       else if (val1 && val2)
+               e.innerHTML = '<%:%s and %s%>'.format(val1, val2);
+       else if (val1)
+               e.innerHTML = val1;
+
+       e.parentNode.style.display = val1 ? 'list-item' : '';
+}
+
+function pie(id, data)
+{
+       data.sort(function(a, b) { return b.value - a.value });
+
+       if (data.length === 0 || (data.length === 1 && data[0].value === 0))
+               data[0] = {
+                       value: 1,
+                       color: '#cccccc',
+                       label: [ '<%:no traffic%>' ]
+               };
+
+       for (var i = 0; i < data.length; i++) {
+               if (!data[i].color) {
+                       var hue = 120 / (data.length-1) * i;
+                       data[i].color = 'hsl(%u, 80%%, 50%%)'.format(hue);
+                       data[i].label.push(hue);
+               }
+       }
+
+       var ctx = document.getElementById(id).getContext('2d');
+
+       if (chartRegistry.hasOwnProperty(id))
+               chartRegistry[id].destroy();
+
+       chartRegistry[id] = new Chart(ctx).Doughnut(data, {
+               segmentStrokeWidth: 1,
+               percentageInnerCutout: 30
+       });
+
+       return chartRegistry[id];
+}
+
+function query(filter, group, order)
+{
+       var keys = [], columns = {}, records = {}, result = [];
+
+       if (typeof(group) !== 'function' && typeof(group) !== 'object')
+               group = ['mac'];
+
+       for (var i = 0; i < trafficData.columns.length; i++)
+               columns[trafficData.columns[i]] = i;
+
+       for (var i = 0; i < trafficData.data.length; i++) {
+               var record = trafficData.data[i];
+
+               if (typeof(filter) === 'function' && filter(columns, record) !== true)
+                       continue;
+
+               var key;
+
+               if (typeof(group) === 'function') {
+                       key = group(columns, record);
+               }
+               else {
+                       key = [];
+
+                       for (var j = 0; j < group.length; j++)
+                               if (columns.hasOwnProperty(group[j]))
+                                       key.push(record[columns[group[j]]]);
+
+                       key = key.join(',');
+               }
+
+               if (!records.hasOwnProperty(key)) {
+                       var rec = {};
+
+                       for (var col in columns)
+                               rec[col] = record[columns[col]];
+
+                       records[key] = rec;
+                       result.push(rec);
+               }
+               else {
+                       records[key].conns    += record[columns.conns];
+                       records[key].rx_bytes += record[columns.rx_bytes];
+                       records[key].rx_pkts  += record[columns.rx_pkts];
+                       records[key].tx_bytes += record[columns.tx_bytes];
+                       records[key].tx_pkts  += record[columns.tx_pkts];
+               }
+       }
+
+       if (typeof(order) === 'function')
+               result.sort(order);
+
+       return result;
+}
+
+function oui(mac) {
+       var m, l = 0, r = ouiData.length / 3 - 1;
+       var mac1 = parseInt(mac.replace(/[^a-fA-F0-9]/g, ''), 16);
+
+       while (l <= r) {
+               m = l + Math.floor((r - l) / 2);
+
+               var mask = (0xffffffffffff -
+                                       (Math.pow(2, 48 - ouiData[m * 3 + 1]) - 1));
+
+               var mac1_hi = ((mac1 / 0x10000) & (mask / 0x10000)) >>> 0;
+               var mac1_lo = ((mac1 &  0xffff) & (mask &  0xffff)) >>> 0;
+
+               var mac2 = parseInt(ouiData[m * 3], 16);
+               var mac2_hi = (mac2 / 0x10000) >>> 0;
+               var mac2_lo = (mac2 &  0xffff) >>> 0;
+
+               if (mac1_hi === mac2_hi && mac1_lo === mac2_lo)
+                       return ouiData[m * 3 + 2];
+
+               if (mac2_hi > mac1_hi ||
+                       (mac2_hi === mac1_hi && mac2_lo > mac1_lo))
+                       r = m - 1;
+               else
+                       l = m + 1;
+       }
+
+       return null;
+}
+
+
+function fetchData(period)
+{
+       XHR.get('<%=url("admin/nlbw/data")%>', { period: period, group_by: 'family,mac,ip,layer7', order_by: '-rx_bytes,-tx_bytes' }, function(xhr, res) {
+               if (res !== null && typeof(res) === 'object' && typeof(res.columns) === 'object' && typeof(res.data) === 'object')
+                       trafficData = res;
+
+               var addrs = query(null, ['ip'], null);
+               var ipAddrs = [];
+
+               for (var i = 0; i < addrs.length; i++)
+                       if (ipAddrs.indexOf(addrs[i].ip) < 0)
+                               ipAddrs.push(addrs[i].ip);
+
+               renderHostData();
+               renderLayer7Data();
+               renderIPv6Data();
+
+               XHR.get('<%=url("admin/nlbw/ptr")%>/' + ipAddrs.join('/'), null, function(xhr, res) {
+                       if (res !== null && typeof(res) === 'object')
+                               hostNames = res;
+               });
+       });
+}
+
+function switchTab(tab)
+{
+       bubbleDismiss();
+
+       return cbi_t_switch('nlbw', tab);
+}
+
+function renderPeriods()
+{
+       var sel = document.getElementById('nlbw.period');
+
+       for (var e, i = trafficPeriods.length - 1; e = trafficPeriods[i]; i--) {
+               var d1 = new Date(e);
+               var d2, pd;
+
+               if (i) {
+                       d2 = new Date(trafficPeriods[i - 1]);
+                       d2.setDate(d2.getDate() - 1);
+                       pd = '%04d-%02d-%02d'.format(d1.getFullYear(), d1.getMonth() + 1, d1.getDate());
+               }
+               else {
+                       d2 = new Date();
+                       pd = '';
+               }
+
+               var opt = document.createElement('option');
+                   opt.setAttribute('data-duration', (d2.getTime() - d1.getTime()) / 1000);
+                   opt.value = pd;
+                   opt.text = '%04d-%02d-%02d - %04d-%02d-%02d'.format(
+                               d1.getFullYear(), d1.getMonth() + 1, d1.getDate(),
+                               d2.getFullYear(), d2.getMonth() + 1, d2.getDate());
+
+               sel.appendChild(opt);
+       }
+
+       sel.selectedIndex = sel.childNodes.length - 1;
+       sel.style.display = '';
+
+       sel.onchange = function() {
+               bubbleDismiss();
+               fetchData(sel.options[sel.selectedIndex].value);
+       }
+}
+
+function renderHostDetail()
+{
+       var key = this.getAttribute('href').substr(1),
+           col = this.getAttribute('data-col'),
+           label = this.getAttribute('data-label'),
+           bubble = document.getElementById('detail-bubble'),
+           arrow = document.getElementById('bubble-arrow'),
+           table = document.getElementById('bubble-table');
+
+       bubbleDismiss();
+
+       var detailData = query(
+               function(c, r) {
+                       return ((r[c.mac] === key || r[c.ip] === key) &&
+                               (r[c.rx_bytes] > 0 || r[c.tx_bytes] > 0));
+               },
+               [col],
+               function(r1, r2) {
+                       return ((r2.rx_bytes + r2.tx_bytes) - (r1.rx_bytes + r1.tx_bytes));
+               }
+       );
+
+       var rxData = [], txData = [];
+
+       table.innerHTML = '<tr>' +
+               '<th>%s</th>'.format(label || col) +
+               '<th><%:Conn.%></th>' +
+               '<th colspan="2"><%:Down. (Bytes / Pkts.)%></th>' +
+               '<th colspan="2"><%:Up. (Bytes / Pkts.)%></th>' +
+       '</tr>';
+
+       for (var i = 0; i < detailData.length; i++) {
+               var rec = detailData[i],
+                   row = table.insertRow(-1);
+
+               row.insertCell(-1).innerHTML = rec[col] || '<%:other%>';
+               row.insertCell(-1).innerHTML = "%1000.2m".format(rec.conns);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.rx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.rx_pkts);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.tx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.tx_pkts);
+
+               rxData.push({
+                       label: ['%s: %%1024.2mB'.format(rec[col] || '<%:other%>'), row],
+                       value: rec.rx_bytes
+               });
+
+               txData.push({
+                       label: ['%s: %%1024.2mB'.format(rec[col] || '<%:other%>'), row],
+                       value: rec.tx_bytes
+               });
+       }
+
+       pie('bubble-pie1', rxData);
+       pie('bubble-pie2', txData);
+
+       var mac = key.toUpperCase();
+       var name = hostInfo.hasOwnProperty(mac) ? hostInfo[mac].name : null;
+
+       if (!name)
+               for (var i = 0; i < detailData.length; i++)
+                       if ((name = hostNames[detailData[i].ip]) !== undefined)
+                               break;
+
+       if (mac !== '00:00:00:00:00:00') {
+               kpi('bubble-hostname', name);
+               kpi('bubble-vendor', oui(mac));
+       }
+       else {
+               kpi('bubble-hostname');
+               kpi('bubble-vendor');
+       }
+
+       var tr = this.parentNode.parentNode,
+           xy = off(tr),
+           xy2 = off(this);
+
+       bubble.style.width = tr.offsetWidth + 'px';
+       bubble.style.left = xy[0] + 'px';
+       bubble.style.top = (xy[1] + tr.offsetHeight) + 'px';
+       arrow.style.left = Math.floor(xy2[0] + this.offsetWidth / 2 - xy[0]) + 'px';
+
+       bubble.className = 'in';
+
+       return false;
+}
+
+function formatHostname(dns)
+{
+       if (dns === undefined || dns === null || dns === '')
+               return '-';
+
+       dns = dns.split('.')[0];
+
+       if (dns.length > 12)
+               return '<span title="%q">%h…</span>'.format(dns, dns.substr(0, 12));
+
+       return '%h'.format(dns);
+}
+
+function renderHostData()
+{
+       var trafData = [], connData = [];
+       var rx_total = 0, tx_total = 0, conn_total = 0;
+       var table = document.getElementById('host-data');
+
+       var hostData = query(
+               function(c, r) {
+                       return (r[c.rx_bytes] > 0 || r[c.tx_bytes] > 0);
+               },
+               ['mac'],
+               //function(c, r) {
+               //      return (r[c.mac] !== '00:00:00:00:00:00') ? r[c.mac] : r[c.ip];
+               //},
+               function(r1, r2) {
+                       return ((r2.rx_bytes + r2.tx_bytes) - (r1.rx_bytes + r1.tx_bytes));
+               }
+       );
+
+       while (table.rows.length > 1)
+               table.deleteRow(1);
+
+       for (var i = 0; i < hostData.length; i++) {
+               var row = table.insertRow(-1),
+                   cell = row.insertCell(-1),
+                   rec = hostData[i],
+                   mac = rec.mac.toUpperCase(),
+                   key = (mac !== '00:00:00:00:00:00') ? mac : rec.ip,
+                   dns = hostInfo[mac] ? hostInfo[mac].name : null;
+
+               var link1 = document.createElement('a');
+                   link1.onclick = renderHostDetail;
+                   link1.href = '#' + rec.mac;
+                   link1.setAttribute('data-col', 'ip');
+                   link1.setAttribute('data-label', '<%:Source IP%>');
+                   link1.innerHTML = (mac !== '00:00:00:00:00:00') ? mac : '<%:other%>';
+
+               var link2 = document.createElement('a');
+                   link2.onclick = renderHostDetail;
+                   link2.href = '#' + rec.mac;
+                   link2.setAttribute('data-col', 'layer7');
+                   link2.setAttribute('data-label', '<%:Protocol%>');
+                   link2.innerHTML = "%1000.2m".format(rec.conns);
+
+               cell.innerHTML = formatHostname(dns);
+               cell.className = 'hostname';
+
+               row.insertCell(-1).appendChild(link1);
+               row.insertCell(-1).appendChild(link2);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.rx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.rx_pkts);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.tx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.tx_pkts);
+
+               trafData.push({
+                       value: rec.rx_bytes + rec.tx_bytes,
+                       label: ["%s: %%.2mB".format(key), row]
+               });
+
+               connData.push({
+                       value: rec.conns,
+                       label: ["%s: %%.2m".format(key), row]
+               });
+
+               rx_total += rec.rx_bytes;
+               tx_total += rec.tx_bytes;
+               conn_total += rec.conns;
+       }
+
+       if (table.rows.length === 1) {
+               var cell = table.insertRow(-1).insertCell(-1);
+
+               cell.setAttribute('colspan', 6);
+               cell.innerHTML = '<em><%:No data recorded yet.%> <a href="<%=url("admin/nlbw/commit")%>"><%:Force reload…%></a></em>';
+       }
+
+       pie('traf-pie', trafData);
+       pie('conn-pie', connData);
+
+       kpi('rx-total', '%1024.2mB'.format(rx_total));
+       kpi('tx-total', '%1024.2mB'.format(tx_total));
+       kpi('conn-total', '%1000m'.format(conn_total));
+       kpi('host-total', '%u'.format(hostData.length));
+}
+
+function renderLayer7Data()
+{
+       var rxData = [], txData = [];
+       var topConn = [[0],[0],[0]], topRx = [[0],[0],[0]], topTx = [[0],[0],[0]];
+       var table = document.getElementById('layer7-data');
+
+       var layer7Data = query(
+               null, ['layer7'],
+               function(r1, r2) {
+                       return ((r2.rx_bytes + r2.tx_bytes) - (r1.rx_bytes + r1.tx_bytes));
+               }
+       );
+
+       while (table.rows.length > 1)
+               table.deleteRow(1);
+
+       for (var i = 0, c = 0; i < layer7Data.length; i++) {
+               var rec = layer7Data[i],
+                   row = table.insertRow(-1);
+
+               rxData.push({
+                       value: rec.rx_bytes,
+                       label: ["%s: %%.2mB".format(rec.layer7 || '<%:other%>'), row]
+               });
+
+               txData.push({
+                       value: rec.tx_bytes,
+                       label: ["%s: %%.2mB".format(rec.layer7 || '<%:other%>'), row]
+               });
+
+               row.insertCell(-1).innerHTML = rec.layer7 || '<%:other%>';
+               row.insertCell(-1).innerHTML = "%1000m".format(rec.conns);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.rx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.rx_pkts);
+               row.insertCell(-1).innerHTML = "%1024.2mB".format(rec.tx_bytes);
+               row.insertCell(-1).innerHTML = "%1000.2mP".format(rec.tx_pkts);
+
+               if (rec.layer7) {
+                       topRx.push([rec.rx_bytes, rec.layer7]);
+                       topTx.push([rec.tx_bytes, rec.layer7]);
+                       topConn.push([rec.conns, rec.layer7]);
+               }
+       }
+
+       if (table.rows.length === 1) {
+               var cell = table.insertRow(-1).insertCell(-1);
+
+               cell.setAttribute('colspan', 6);
+               cell.innerHTML = '<em><%:No data recorded yet.%> <a href="<%=url("admin/nlbw/commit")%>"><%:Force reload…%></a></em>';
+       }
+
+       pie('layer7-rx-pie', rxData);
+       pie('layer7-tx-pie', txData);
+
+       topRx.sort(function(a, b) { return b[0] - a[0] });
+       topTx.sort(function(a, b) { return b[0] - a[0] });
+       topConn.sort(function(a, b) { return b[0] - a[0] });
+
+       kpi('layer7-total', layer7Data.length);
+       kpi('layer7-most-rx', topRx[0][1], topRx[1][1], topRx[2][1]);
+       kpi('layer7-most-tx', topTx[0][1], topTx[1][1], topTx[2][1]);
+       kpi('layer7-most-conn', topConn[0][1], topConn[1][1], topConn[2][1]);
+}
+
+function renderIPv6Data()
+{
+       var table     = document.getElementById('ipv6-data'),
+           col       = { },
+           rx4_total = 0,
+           tx4_total = 0,
+           rx6_total = 0,
+           tx6_total = 0,
+           v4_total  = 0,
+           v6_total  = 0,
+           ds_total  = 0,
+           families  = { },
+           records   = { };
+
+       ipv6Data = query(
+               null, ['family', 'mac'],
+               function(r1, r2) {
+                       return ((r2.rx_bytes + r2.tx_bytes) - (r1.rx_bytes + r1.tx_bytes));
+               }
+       );
+
+       for (var i = 0, c = 0; i < ipv6Data.length; i++) {
+               var rec = ipv6Data[i],
+                   mac = rec.mac.toUpperCase(),
+                   ip  = rec.ip,
+                   fam = families[mac] || 0,
+                   recs = records[mac] || {};
+
+               if (rec.family == 4) {
+                       rx4_total += rec.rx_bytes;
+                       tx4_total += rec.tx_bytes;
+                       fam |= 1;
+               }
+               else {
+                       rx6_total += rec.rx_bytes;
+                       tx6_total += rec.tx_bytes;
+                       fam |= 2;
+               }
+
+               recs[rec.family] = rec;
+               records[mac] = recs;
+
+               families[mac] = fam;
+       }
+
+       for (var mac in families) {
+               switch (families[mac])
+               {
+               case 3:
+                       ds_total++;
+                       break;
+
+               case 2:
+                       v6_total++;
+                       break;
+
+               case 1:
+                       v4_total++;
+                       break;
+               }
+       }
+
+       while (table.rows.length > 1)
+               table.deleteRow(1);
+
+       for (var mac in records) {
+               if (mac === '00:00:00:00:00:00')
+                       continue;
+
+               var row = table.insertRow(-1),
+                   cell1 = row.insertCell(-1),
+                   cell2 = row.insertCell(-1),
+                   dns = hostInfo[mac] ? hostInfo[mac].name : null,
+                   rec4 = records[mac][4],
+                   rec6 = records[mac][6];
+
+               cell1.setAttribute('rowspan', 2);
+               cell1.innerHTML = formatHostname(dns);
+               cell1.className = 'hostname';
+
+               cell2.setAttribute('rowspan', 2);
+               cell2.innerHTML = mac;
+
+               row.insertCell(-1).innerHTML = 'IPv4';
+               row.insertCell(-1).innerHTML = rec4 ? "%1024.2mB".format(rec4.rx_bytes) : '-';
+               row.insertCell(-1).innerHTML = rec4 ? "%1000.2mP".format(rec4.rx_pkts)  : '-';
+               row.insertCell(-1).innerHTML = rec4 ? "%1024.2mB".format(rec4.tx_bytes) : '-';
+               row.insertCell(-1).innerHTML = rec4 ? "%1000.2mP".format(rec4.tx_pkts)  : '-';
+
+               row = table.insertRow(-1);
+
+               row.insertCell(-1).innerHTML = 'IPv6';
+               row.insertCell(-1).innerHTML = rec6 ? "%1024.2mB".format(rec6.rx_bytes) : '-';
+               row.insertCell(-1).innerHTML = rec6 ? "%1000.2mP".format(rec6.rx_pkts)  : '-';
+               row.insertCell(-1).innerHTML = rec6 ? "%1024.2mB".format(rec6.tx_bytes) : '-';
+               row.insertCell(-1).innerHTML = rec6 ? "%1000.2mP".format(rec6.tx_pkts)  : '-';
+       }
+
+       if (table.rows.length === 1) {
+               var cell = table.insertRow(-1).insertCell(-1);
+
+               cell.setAttribute('colspan', 7);
+               cell.innerHTML = '<em><%:No data recorded yet.%> <a href="<%=url("admin/nlbw/commit")%>"><%:Force reload…%></a></em>';
+       }
+
+       var shareData = [], hostsData = [];
+
+       if (rx4_total > 0 || tx4_total > 0)
+               shareData.push({
+                       value: rx4_total + tx4_total,
+                       label: ["IPv4: %.2mB"],
+                       color: 'hsl(140, 100%, 50%)'
+               });
+
+       if (rx6_total > 0 || tx6_total > 0)
+               shareData.push({
+                       value: rx6_total + tx6_total,
+                       label: ["IPv6: %.2mB"],
+                       color: 'hsl(180, 100%, 50%)'
+               });
+
+       if (v4_total > 0)
+               hostsData.push({
+                       value: v4_total,
+                       label: ["<%:%d IPv4-only hosts%>"],
+                       color: 'hsl(140, 100%, 50%)'
+               });
+
+       if (v6_total > 0)
+               hostsData.push({
+                       value: v6_total,
+                       label: ["<%:%d IPv6-only hosts%>"],
+                       color: 'hsl(180, 100%, 50%)'
+               });
+
+       if (ds_total > 0)
+               hostsData.push({
+                       value: ds_total,
+                       label: ["<%:%d dual-stack hosts%>"],
+                       color: 'hsl(50, 100%, 50%)'
+               });
+
+       pie('ipv6-share-pie', shareData);
+       pie('ipv6-hosts-pie', hostsData);
+
+       kpi('ipv6-hosts', '%.2f%%'.format(100 / (ds_total + v4_total + v6_total) * (ds_total + v6_total)));
+       kpi('ipv6-share', '%.2f%%'.format(100 / (rx4_total + rx6_total + tx4_total + tx6_total) * (rx6_total + tx6_total)));
+       kpi('ipv6-rx', '%1024.2mB'.format(rx6_total));
+       kpi('ipv6-tx', '%1024.2mB'.format(tx6_total));
+}
+
+function bubbleDismiss()
+{
+       var bubble = document.getElementById('detail-bubble');
+
+       bubble.className = '';
+       document.body.appendChild(bubble);
+
+       return false;
+}
+
+
+//]]></script>
+
+<h2 name="content"><%:Netlink Bandwidth Monitor%></h2>
+
+<div id="detail-bubble">
+       <span id="bubble-arrow"></span>
+       <div>
+               <div class="head">
+                       <a class="dismiss" href="#" onclick="this.blur(); return bubbleDismiss()">×</a>
+                       <div class="pie">
+                               <label>Download</label>
+                               <canvas id="bubble-pie1" width="100" height="100"></canvas>
+                       </div>
+                       <div class="pie">
+                               <label>Upload</label>
+                               <canvas id="bubble-pie2" width="100" height="100"></canvas>
+                       </div>
+                       <div class="kpi">
+                               <ul>
+                                       <li><%_Hostname: <big id="bubble-hostname">example.org</big>%></li>
+                                       <li><%_Vendor: <big id="bubble-vendor">Example Corp.</big>%></li>
+                               </ul>
+                       </div>
+               </div>
+               <table id="bubble-table"></table>
+       </div>
+</div>
+
+<hr />
+
+<p>
+       <%:Select accounting period:%>
+       <select id="nlbw.period" style="display:none"></select>
+</p>
+
+<hr />
+
+<ul class="cbi-tabmenu">
+       <li id="tab.nlbw.traffic" class="cbi-tab"><a href="#" onclick="return switchTab('traffic')"><%:Traffic Distribution%></a></li>
+       <li id="tab.nlbw.layer7" class="cbi-tab-disabled"><a href="#" onclick="return switchTab('layer7')"><%:Application Protocols%></a></li>
+       <li id="tab.nlbw.ipv6" class="cbi-tab-disabled"><a href="#" onclick="return switchTab('ipv6')"><%:IPv6%></a></li>
+       <li id="tab.nlbw.export" class="cbi-tab-disabled"><a href="#" onclick="return switchTab('export')"><%:Export%></a></li>
+</ul>
+
+<div class="cbi-section" id="container.nlbw.traffic">
+       <div>
+               <div class="pie">
+                       <label><%:Traffic / Host%></label>
+                       <canvas id="traf-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="pie">
+                       <label><%:Connections / Host%></label>
+                       <canvas id="conn-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="kpi">
+                       <ul>
+                               <li><%_<big id="host-total">0</big> hosts%></li>
+                               <li><%_<big id="rx-total">0</big> download%></li>
+                               <li><%_<big id="tx-total">0</big> upload%></li>
+                               <li><%_<big id="conn-total">0</big> connections%></li>
+                       </ul>
+               </div>
+       </div>
+       <table id="host-data">
+               <tr>
+                       <th width="10%" class="hostname"><%:Host%></th>
+                       <th width="5%"><%:MAC%></th>
+                       <th width="5%"><%:Connections%></th>
+                       <th width="30%" colspan="2"><%:Download (Bytes / Packets)%></th>
+                       <th width="30%" colspan="2"><%:Upload (Bytes / Packets)%></th>
+               </tr>
+       </table>
+</div>
+
+<div class="cbi-section" id="container.nlbw.layer7" style="display:none">
+       <div>
+               <div class="pie">
+                       <label><%:Download / Application%></label>
+                       <canvas id="layer7-rx-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="pie">
+                       <label><%:Upload / Application%></label>
+                       <canvas id="layer7-tx-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="kpi">
+                       <ul>
+                               <li><%_<big id="layer7-total">0</big> different application protocols%></li>
+                               <li><%_<big id="layer7-most-rx">0</big> cause the most download%></li>
+                               <li><%_<big id="layer7-most-tx">0</big> cause the most upload%></li>
+                               <li><%_<big id="layer7-most-conn">0</big> cause the most connections%></li>
+                       </ul>
+               </div>
+       </div>
+       <table id="layer7-data">
+               <tr>
+                       <th width="20%"><%:Application%></th>
+                       <th width="10%"><%:Connections%></th>
+                       <th width="30%" colspan="2"><%:Download (Bytes / Packets)%></th>
+                       <th width="30%" colspan="2"><%:Upload (Bytes / Packets)%></th>
+               </tr>
+       </table>
+</div>
+
+<div class="cbi-section" id="container.nlbw.ipv6" style="display:none">
+       <div>
+               <div class="pie">
+                       <label><%:IPv4 vs. IPv6%></label>
+                       <canvas id="ipv6-share-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="pie">
+                       <label><%:Dualstack enabled hosts%></label>
+                       <canvas id="ipv6-hosts-pie" width="200" height="200"></canvas>
+               </div>
+
+               <div class="kpi">
+                       <ul>
+                               <li><%_<big id="ipv6-hosts">0%</big> IPv6 support rate among hosts%></li>
+                               <li><%_<big id="ipv6-share">0%</big> of the total traffic is IPv6%></li>
+                               <li><%_<big id="ipv6-rx">0B</big> total IPv6 download%></li>
+                               <li><%_<big id="ipv6-tx">0B</big> total IPv6 upload%></li>
+                       </ul>
+               </div>
+       </div>
+       <table id="ipv6-data">
+               <tr>
+                       <th width="10%" class="hostname"><%:Host%></th>
+                       <th width="5%"><%:MAC%></th>
+                       <th width="5%"><%:Family%></th>
+                       <th width="40%" colspan="2"><%:Download (Bytes / Packets)%></th>
+                       <th width="40%" colspan="2"><%:Upload (Bytes / Packets)%></th>
+               </tr>
+       </table>
+</div>
+
+<div class="cbi-section" id="container.nlbw.export" style="display:none">
+       <ul>
+               <li><a href="<%=url('admin/nlbw/data')%>?type=csv&#38;group_by=mac&#38;order_by=-rx,-tx"><%:CSV, grouped by MAC%></a></li>
+               <li><a href="<%=url('admin/nlbw/data')%>?type=csv&#38;group_by=ip&#38;order_by=-rx,-tx"><%:CSV, grouped by IP%></a></li>
+               <li><a href="<%=url('admin/nlbw/data')%>?type=csv&#38;group_by=layer7&#38;order_by=-rx,-tx"><%:CSV, grouped by protocol%></a></li>
+               <li><a href="<%=url('admin/nlbw/data')%>?type=json"><%:JSON dump%></a></li>
+       </ul>
+</div>
+
+<script type="text/javascript">//<![CDATA[
+       cbi_t_add('nlbw', 'traffic');
+       cbi_t_add('nlbw', 'layer7');
+       cbi_t_add('nlbw', 'ipv6');
+       cbi_t_add('nlbw', 'export');
+
+       XHR.get('<%=url("admin/nlbw/list")%>', null, function(xhr, res) {
+
+               if (res !== null && typeof(res) === 'object' && res.length > 0) {
+                       trafficPeriods = res;
+                       renderPeriods();
+               }
+
+               xhr.open('GET', 'https://raw.githubusercontent.com/jow-/oui-database/master/oui.json', true);
+               xhr.onreadystatechange = function() {
+                       if (xhr.readyState === 4) {
+                               try { res = JSON.parse(xhr.responseText); }
+                               catch(e) { res = null; }
+
+                               if (res !== null && typeof(res) === 'object' && (res.length % 3) === 0)
+                                       ouiData = res;
+
+                               fetchData('');
+                       }
+               };
+               xhr.send(null);
+       });
+//]]></script>
+
+<%+footer%>
diff --git a/applications/luci-app-nlbwmon/po/ja/nlbwmon.po b/applications/luci-app-nlbwmon/po/ja/nlbwmon.po
new file mode 100644 (file)
index 0000000..b5931e0
--- /dev/null
@@ -0,0 +1,387 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: \n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Language-Team: \n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: ja\n"
+"X-Generator: Poedit 2.0.3\n"
+
+msgid "%d IPv4-only hosts"
+msgstr "%d IPv4 限定ホスト"
+
+msgid "%d IPv6-only hosts"
+msgstr "%d IPv6 限定ホスト"
+
+msgid "%d dual-stack hosts"
+msgstr "%d デュアルスタック ホスト"
+
+msgid "%s and %s"
+msgstr "%s, %s"
+
+msgid "%s, %s and %s"
+msgstr "%s, %s, %s"
+
+msgid "-1 - Restart every last day of month"
+msgstr "-1 - 月の最終日"
+
+msgid "-7 - Restart a week before end of month"
+msgstr "-7 - 月の最終日の一週間前"
+
+msgid "1 - Restart every 1st of month"
+msgstr "1 - 毎月1日"
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr "10m - フラッシュ媒体への負荷が高い頻繁なコミット(10分)"
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr "12h - データ消失リスクとフラッシュ媒体への負荷の妥協点(12時間)"
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr "24h - データ消失リスクは高いがフラッシュ媒体への負荷は最小(24時間)"
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr "30s - 現在の状態の把握に適切な1分間に2回のリフレッシュ(30秒)"
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr ""
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr "60秒 - 1分毎のコミット、非フラッシュ ストレージに有用"
+
+msgid "<big id=\"conn-total\">0</big> connections"
+msgstr "<big id=\"conn-total\">0</big> 接続数"
+
+msgid "<big id=\"host-total\">0</big> hosts"
+msgstr "<big id=\"host-total\">0</big> ホスト数"
+
+msgid "<big id=\"ipv6-hosts\">0%</big> IPv6 support rate among hosts"
+msgstr "<big id=\"ipv6-hosts\">0%</big> 全ホスト中の IPv6 サポート比率"
+
+msgid "<big id=\"ipv6-rx\">0B</big> total IPv6 download"
+msgstr "<big id=\"ipv6-rx\">0B</big> IPv6 総ダウンロード"
+
+msgid "<big id=\"ipv6-share\">0%</big> of the total traffic is IPv6"
+msgstr "<big id=\"ipv6-share\">0%</big> 全トラフィック中の IPv6 の割合"
+
+msgid "<big id=\"ipv6-tx\">0B</big> total IPv6 upload"
+msgstr "<big id=\"ipv6-tx\">0B</big> IPv6 総アップロード"
+
+msgid "<big id=\"layer7-most-conn\">0</big> cause the most connections"
+msgstr "<big id=\"layer7-most-conn\">0</big> 接続数上位"
+
+msgid "<big id=\"layer7-most-rx\">0</big> cause the most download"
+msgstr "<big id=\"layer7-most-rx\">0</big> ダウンロード上位"
+
+msgid "<big id=\"layer7-most-tx\">0</big> cause the most upload"
+msgstr "<big id=\"layer7-most-tx\">0</big> アップロード上位"
+
+msgid "<big id=\"layer7-total\">0</big> different application protocols"
+msgstr "<big id=\"layer7-total\">0</big> アプリケーション プロトコル数"
+
+msgid "<big id=\"rx-total\">0</big> download"
+msgstr "<big id=\"rx-total\">0</big> ダウンロード"
+
+msgid "<big id=\"tx-total\">0</big> upload"
+msgstr "<big id=\"tx-total\">0</big> アップロード"
+
+msgid "Accounting period"
+msgstr "収集期間"
+
+msgid "Advanced Settings"
+msgstr "拡張設定"
+
+msgid "Application"
+msgstr "アプリケーション"
+
+msgid "Application Protocols"
+msgstr "アプリケーション プロトコル"
+
+msgid "Backup"
+msgstr "バックアップ"
+
+msgid "Bandwidth Monitor"
+msgstr "帯域幅モニター"
+
+msgid "CSV, grouped by IP"
+msgstr "CSV(IP によるグループ化)"
+
+msgid "CSV, grouped by MAC"
+msgstr "CSV(MAC によるグループ化)"
+
+msgid "CSV, grouped by protocol"
+msgstr "CSV(プロトコルによるグループ化)"
+
+msgid ""
+"Changing the accounting interval type will invalidate existing databases!"
+"<br /><strong><a href=\"%s\">Download backup</a></strong>."
+msgstr ""
+"既存のデータベースと互換性の無い収集期間の形式が選択されました。<br /"
+"><strong><a href=\"%s\">バックアップのダウンロード</a></strong>"
+
+msgid ""
+"Choose \"Day of month\" to restart the accounting period monthly on a "
+"specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the "
+"accounting period exactly every N days, beginning at a given date."
+msgstr ""
+"月毎で設定した日付からのデータの計測を行うには、 \"月間\" を選択します(例: "
+"毎月3日)。設定した日数毎にデータの収集を行うには、\"特定の間隔\" を選択しま"
+"す。後者の場合、指定された日付から開始されます。"
+
+msgid "Commit interval"
+msgstr "コミット間隔"
+
+msgid "Compress database"
+msgstr "データベースの圧縮"
+
+msgid "Configuration"
+msgstr "設定"
+
+msgid "Conn."
+msgstr "接続数"
+
+msgid "Connections"
+msgstr "接続数"
+
+msgid "Connections / Host"
+msgstr "ホスト毎の接続数"
+
+msgid "Database directory"
+msgstr "データベース ディレクトリ"
+
+msgid ""
+"Database storage directory. One file per accounting period will be placed "
+"into this directory."
+msgstr ""
+"データベースの保存先ディレクトリです。計測期間あたり 1 つのファイルがこのディ"
+"レクトリに配置されます。"
+
+msgid "Day of month"
+msgstr "月間"
+
+msgid ""
+"Day of month to restart the accounting period. Use negative values to count "
+"towards the end of month, e.g. \"-5\" to specify the 27th of July or the "
+"24th of Februrary."
+msgstr ""
+"月の中で新たな収集期間を開始する日です。月の最終日からの日数をマイナス値で指"
+"定することができます(例: 7月27日または2月24日は \"-5\")。"
+
+msgid "Display"
+msgstr "表示"
+
+msgid "Down. (Bytes / Pkts.)"
+msgstr "ダウンロード(Bytes / Pkts.)"
+
+msgid "Download (Bytes / Packets)"
+msgstr "ダウンロード(Bytes / Packets)"
+
+msgid "Download / Application"
+msgstr "ダウンロード / アプリケーション"
+
+msgid "Download Database Backup"
+msgstr "データベース バックアップのダウンロード"
+
+msgid "Dualstack enabled hosts"
+msgstr "デュアルスタック ホスト"
+
+msgid "Due date"
+msgstr "期日"
+
+msgid "Export"
+msgstr "エクスポート"
+
+msgid "Family"
+msgstr "IP 種別"
+
+msgid "Fixed interval"
+msgstr "特定の間隔"
+
+msgid "Force reload…"
+msgstr "強制リロード..."
+
+msgid "General Settings"
+msgstr "全般設定"
+
+msgid "Generate Backup"
+msgstr "バックアップの作成"
+
+msgid "Host"
+msgstr "ホスト"
+
+msgid "Hostname: <big id=\"bubble-hostname\">example.org</big>"
+msgstr "ホスト名: <big id=\"bubble-hostname\">example.org</big>"
+
+msgid "IPv4 vs. IPv6"
+msgstr "IPv4 及び IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Interval"
+msgstr "間隔"
+
+msgid ""
+"Interval at which the temporary in-memory database is committed to the "
+"persistent database directory."
+msgstr ""
+"メモリー上の一時的なデータベースから、永続的なデータベース ディレクトリへのコ"
+"ミットを実行する間隔です。"
+
+msgid ""
+"Interval at which traffic counters of still established connections are "
+"refreshed from netlink information."
+msgstr ""
+
+msgid "Invalid or empty backup archive"
+msgstr "無効または空のバックアップ アーカイブです。"
+
+msgid "JSON dump"
+msgstr "JSON ダンプ"
+
+msgid "Length of accounting interval in days."
+msgstr "収集期間の日数です。"
+
+msgid "Local interfaces"
+msgstr "ローカル インターフェース"
+
+msgid "Local subnets"
+msgstr "ローカル サブネット"
+
+msgid "MAC"
+msgstr "MAC"
+
+msgid "Maximum entries"
+msgstr "最大件数"
+
+msgid ""
+"Maximum number of accounting periods to keep, use zero to keep databases "
+"forever."
+msgstr ""
+"計測データを保持する、収集期間の最大個数です。 '0' を設定した場合、全データを"
+"保持します。"
+
+msgid "Netlink Bandwidth Monitor"
+msgstr "Netlink Bandwidth Monitor"
+
+msgid "Netlink Bandwidth Monitor - Backup / Restore"
+msgstr "Netlink Bandwidth Monitor - バックアップ / 復元"
+
+msgid "Netlink Bandwidth Monitor - Configuration"
+msgstr "Netlink Bandwidth Monitor - 設定"
+
+msgid "No data recorded yet."
+msgstr "まだデータがありません。"
+
+msgid "Only conntrack streams from or to any of these networks are counted."
+msgstr ""
+"選択されたネットワークにおける conntrack ストリームのみが計測されます。"
+
+msgid "Only conntrack streams from or to any of these subnets are counted."
+msgstr "設定されたサブネットにおける conntrack ストリームのみが計測されます。"
+
+msgid "Preallocate database"
+msgstr "データベースの事前割当"
+
+msgid "Protocol"
+msgstr "プロトコル"
+
+msgid "Protocol Mapping"
+msgstr "プロトコル マッピング"
+
+msgid ""
+"Protocol mappings to distinguish traffic types per host, one mapping per "
+"line. The first value specifies the IP protocol, the second value the port "
+"number and the third column is the name of the mapped protocol."
+msgstr ""
+"ホスト毎のトラフィック形式を区別するためのプロトコル マッピングで、一行あたり"
+"一つのマッピングを追加します。各エントリーの一つ目の値は IP プロトコルを、2つ"
+"目の値はポート番号、3つ目はマッピングされたプロトコルの名前をそれぞれ表しま"
+"す。"
+
+msgid "Refresh interval"
+msgstr "リフレッシュ間隔"
+
+msgid "Restore"
+msgstr "復元"
+
+msgid "Restore Database Backup"
+msgstr "データベースの復元"
+
+msgid "Select accounting period:"
+msgstr "収集期間を選択:"
+
+msgid "Source IP"
+msgstr "アクセス元 IP"
+
+msgid "Start date"
+msgstr "開始日"
+
+msgid "Start date of the first accounting period, e.g. begin of ISP contract."
+msgstr "初回のデータ収集の開始日です(例: ISP 契約の開始日)。"
+
+msgid "Stored periods"
+msgstr "保存期間"
+
+msgid ""
+"The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic "
+"accounting program keeping track of bandwidth usage per host and protocol."
+msgstr ""
+"Netlink Bandwidth Monitor (nlbwmon) は、軽量かつ、ホストやプロトコル毎に帯域"
+"幅使用量の追跡を行う効率的なトラフィック計測プログラムです。"
+
+msgid "The following database files have been restored: %s"
+msgstr "次のデータベース ファイルが復元されました: %s"
+
+msgid ""
+"The maximum amount of entries that should be put into the database, setting "
+"the limit to 0 will allow databases to grow indefinitely."
+msgstr ""
+"データベースに保管される最大件数です。 '0' を設定した場合、制限無しのデータ"
+"ベースの増大を許可します。"
+
+msgid "Traffic / Host"
+msgstr "トラフィック / ホスト"
+
+msgid "Traffic Distribution"
+msgstr "トラフィック内訳"
+
+msgid "Up. (Bytes / Pkts.)"
+msgstr "アップロード(Bytes / Pkts.)"
+
+msgid "Upload (Bytes / Packets)"
+msgstr "アップロード(Bytes / Packets)"
+
+msgid "Upload / Application"
+msgstr "アップロード / アプリケーション"
+
+msgid "Vendor: <big id=\"bubble-vendor\">Example Corp.</big>"
+msgstr "ベンダ: <big id=\"bubble-vendor\">Example Corp.</big>"
+
+msgid "Warning"
+msgstr "警告"
+
+msgid ""
+"Whether to gzip compress archive databases. Compressing the database files "
+"makes accessing old data slightly slower but helps to reduce storage "
+"requirements."
+msgstr ""
+"データベースの gzip 圧縮アーカイブ化です。データベース ファイルを圧縮すると古"
+"いデータへのアクセスが多少遅くなりますが、ストレージ使用量の低減に役立ちま"
+"す。"
+
+msgid ""
+"Whether to preallocate the maximum possible database size in memory. This is "
+"mainly useful for memory constrained systems which might not be able to "
+"satisfy memory allocation after longer uptime periods."
+msgstr ""
+
+msgid "no traffic"
+msgstr "トラフィック無し"
+
+msgid "other"
+msgstr "その他"
diff --git a/applications/luci-app-nlbwmon/po/templates/nlbwmon.pot b/applications/luci-app-nlbwmon/po/templates/nlbwmon.pot
new file mode 100644 (file)
index 0000000..61d2230
--- /dev/null
@@ -0,0 +1,352 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "%d IPv4-only hosts"
+msgstr ""
+
+msgid "%d IPv6-only hosts"
+msgstr ""
+
+msgid "%d dual-stack hosts"
+msgstr ""
+
+msgid "%s and %s"
+msgstr ""
+
+msgid "%s, %s and %s"
+msgstr ""
+
+msgid "-1 - Restart every last day of month"
+msgstr ""
+
+msgid "-7 - Restart a week before end of month"
+msgstr ""
+
+msgid "1 - Restart every 1st of month"
+msgstr ""
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr ""
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr ""
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr ""
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr ""
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr ""
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr ""
+
+msgid "<big id=\"conn-total\">0</big> connections"
+msgstr ""
+
+msgid "<big id=\"host-total\">0</big> hosts"
+msgstr ""
+
+msgid "<big id=\"ipv6-hosts\">0%</big> IPv6 support rate among hosts"
+msgstr ""
+
+msgid "<big id=\"ipv6-rx\">0B</big> total IPv6 download"
+msgstr ""
+
+msgid "<big id=\"ipv6-share\">0%</big> of the total traffic is IPv6"
+msgstr ""
+
+msgid "<big id=\"ipv6-tx\">0B</big> total IPv6 upload"
+msgstr ""
+
+msgid "<big id=\"layer7-most-conn\">0</big> cause the most connections"
+msgstr ""
+
+msgid "<big id=\"layer7-most-rx\">0</big> cause the most download"
+msgstr ""
+
+msgid "<big id=\"layer7-most-tx\">0</big> cause the most upload"
+msgstr ""
+
+msgid "<big id=\"layer7-total\">0</big> different application protocols"
+msgstr ""
+
+msgid "<big id=\"rx-total\">0</big> download"
+msgstr ""
+
+msgid "<big id=\"tx-total\">0</big> upload"
+msgstr ""
+
+msgid "Accounting period"
+msgstr ""
+
+msgid "Advanced Settings"
+msgstr ""
+
+msgid "Application"
+msgstr ""
+
+msgid "Application Protocols"
+msgstr ""
+
+msgid "Backup"
+msgstr ""
+
+msgid "Bandwidth Monitor"
+msgstr ""
+
+msgid "CSV, grouped by IP"
+msgstr ""
+
+msgid "CSV, grouped by MAC"
+msgstr ""
+
+msgid "CSV, grouped by protocol"
+msgstr ""
+
+msgid ""
+"Changing the accounting interval type will invalidate existing databases!"
+"<br /><strong><a href=\"%s\">Download backup</a></strong>."
+msgstr ""
+
+msgid ""
+"Choose \"Day of month\" to restart the accounting period monthly on a "
+"specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the "
+"accounting period exactly every N days, beginning at a given date."
+msgstr ""
+
+msgid "Commit interval"
+msgstr ""
+
+msgid "Compress database"
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Conn."
+msgstr ""
+
+msgid "Connections"
+msgstr ""
+
+msgid "Connections / Host"
+msgstr ""
+
+msgid "Database directory"
+msgstr ""
+
+msgid ""
+"Database storage directory. One file per accounting period will be placed "
+"into this directory."
+msgstr ""
+
+msgid "Day of month"
+msgstr ""
+
+msgid ""
+"Day of month to restart the accounting period. Use negative values to count "
+"towards the end of month, e.g. \"-5\" to specify the 27th of July or the "
+"24th of Februrary."
+msgstr ""
+
+msgid "Display"
+msgstr ""
+
+msgid "Down. (Bytes / Pkts.)"
+msgstr ""
+
+msgid "Download (Bytes / Packets)"
+msgstr ""
+
+msgid "Download / Application"
+msgstr ""
+
+msgid "Download Database Backup"
+msgstr ""
+
+msgid "Dualstack enabled hosts"
+msgstr ""
+
+msgid "Due date"
+msgstr ""
+
+msgid "Export"
+msgstr ""
+
+msgid "Family"
+msgstr ""
+
+msgid "Fixed interval"
+msgstr ""
+
+msgid "Force reload…"
+msgstr ""
+
+msgid "General Settings"
+msgstr ""
+
+msgid "Generate Backup"
+msgstr ""
+
+msgid "Host"
+msgstr ""
+
+msgid "Hostname: <big id=\"bubble-hostname\">example.org</big>"
+msgstr ""
+
+msgid "IPv4 vs. IPv6"
+msgstr ""
+
+msgid "IPv6"
+msgstr ""
+
+msgid "Interval"
+msgstr ""
+
+msgid ""
+"Interval at which the temporary in-memory database is committed to the "
+"persistent database directory."
+msgstr ""
+
+msgid ""
+"Interval at which traffic counters of still established connections are "
+"refreshed from netlink information."
+msgstr ""
+
+msgid "Invalid or empty backup archive"
+msgstr ""
+
+msgid "JSON dump"
+msgstr ""
+
+msgid "Length of accounting interval in days."
+msgstr ""
+
+msgid "Local interfaces"
+msgstr ""
+
+msgid "Local subnets"
+msgstr ""
+
+msgid "MAC"
+msgstr ""
+
+msgid "Maximum entries"
+msgstr ""
+
+msgid ""
+"Maximum number of accounting periods to keep, use zero to keep databases "
+"forever."
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor"
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor - Backup / Restore"
+msgstr ""
+
+msgid "Netlink Bandwidth Monitor - Configuration"
+msgstr ""
+
+msgid "No data recorded yet."
+msgstr ""
+
+msgid "Only conntrack streams from or to any of these networks are counted."
+msgstr ""
+
+msgid "Only conntrack streams from or to any of these subnets are counted."
+msgstr ""
+
+msgid "Preallocate database"
+msgstr ""
+
+msgid "Protocol"
+msgstr ""
+
+msgid "Protocol Mapping"
+msgstr ""
+
+msgid ""
+"Protocol mappings to distinguish traffic types per host, one mapping per "
+"line. The first value specifies the IP protocol, the second value the port "
+"number and the third column is the name of the mapped protocol."
+msgstr ""
+
+msgid "Refresh interval"
+msgstr ""
+
+msgid "Restore"
+msgstr ""
+
+msgid "Restore Database Backup"
+msgstr ""
+
+msgid "Select accounting period:"
+msgstr ""
+
+msgid "Source IP"
+msgstr ""
+
+msgid "Start date"
+msgstr ""
+
+msgid "Start date of the first accounting period, e.g. begin of ISP contract."
+msgstr ""
+
+msgid "Stored periods"
+msgstr ""
+
+msgid ""
+"The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic "
+"accounting program keeping track of bandwidth usage per host and protocol."
+msgstr ""
+
+msgid "The following database files have been restored: %s"
+msgstr ""
+
+msgid ""
+"The maximum amount of entries that should be put into the database, setting "
+"the limit to 0 will allow databases to grow indefinitely."
+msgstr ""
+
+msgid "Traffic / Host"
+msgstr ""
+
+msgid "Traffic Distribution"
+msgstr ""
+
+msgid "Up. (Bytes / Pkts.)"
+msgstr ""
+
+msgid "Upload (Bytes / Packets)"
+msgstr ""
+
+msgid "Upload / Application"
+msgstr ""
+
+msgid "Vendor: <big id=\"bubble-vendor\">Example Corp.</big>"
+msgstr ""
+
+msgid "Warning"
+msgstr ""
+
+msgid ""
+"Whether to gzip compress archive databases. Compressing the database files "
+"makes accessing old data slightly slower but helps to reduce storage "
+"requirements."
+msgstr ""
+
+msgid ""
+"Whether to preallocate the maximum possible database size in memory. This is "
+"mainly useful for memory constrained systems which might not be able to "
+"satisfy memory allocation after longer uptime periods."
+msgstr ""
+
+msgid "no traffic"
+msgstr ""
+
+msgid "other"
+msgstr ""
diff --git a/applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po b/applications/luci-app-nlbwmon/po/zh-cn/nlbwmon.po
new file mode 100644 (file)
index 0000000..54fb3f6
--- /dev/null
@@ -0,0 +1,366 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "%d IPv4-only hosts"
+msgstr "%d 个主机仅支持 IPv4"
+
+msgid "%d IPv6-only hosts"
+msgstr "%d 个主机仅支持 IPv6"
+
+msgid "%d dual-stack hosts"
+msgstr "%d 个双协议栈主机"
+
+msgid "%s and %s"
+msgstr "%s 和 %s"
+
+msgid "%s, %s and %s"
+msgstr "%s, %s 和 %s"
+
+msgid "-1 - Restart every last day of month"
+msgstr "-1 - 每月的最后一天重新开始"
+
+msgid "-7 - Restart a week before end of month"
+msgstr "-7 - 每月底前一周重新开始"
+
+msgid "1 - Restart every 1st of month"
+msgstr "1 - 每月的第一天重新开始"
+
+msgid "10m - frequent commits at the expense of flash wear"
+msgstr "10m - 频繁提交,闪存损耗的开销也增大"
+
+msgid "12h - compromise between risk of data loss and flash wear"
+msgstr "12h - 平衡统计数据丢失的风险以及闪存使用寿命"
+
+msgid "24h - least flash wear at the expense of data loss risk"
+msgstr "24h - 以数据丢失风险的代价换取最小的闪存损耗"
+
+msgid "30s - refresh twice per minute for reasonably current stats"
+msgstr "30s - 每分钟刷新二次以获得较准确的当前统计值"
+
+msgid "5m - rarely refresh to avoid frequently clearing conntrack counters"
+msgstr "5m - 较少刷新以避免频繁清除连接跟踪计数器"
+
+msgid "60s - commit minutely, useful for non-flash storage"
+msgstr "60s - 每分钟提交,适用于非闪存类型存储"
+
+msgid "<big id=\"conn-total\">0</big> connections"
+msgstr "连接:<big id=\"conn-total\">0</big>"
+
+msgid "<big id=\"host-total\">0</big> hosts"
+msgstr "主机:<big id=\"host-total\">0</big>"
+
+msgid "<big id=\"ipv6-hosts\">0%</big> IPv6 support rate among hosts"
+msgstr "支持 IPv6 的主机比例:<big id=\"ipv6-hosts\">0%</big>"
+
+msgid "<big id=\"ipv6-rx\">0B</big> total IPv6 download"
+msgstr "IPv6 总下载量:<big id=\"ipv6-rx\">0B</big>"
+
+msgid "<big id=\"ipv6-share\">0%</big> of the total traffic is IPv6"
+msgstr "IPv6 流量比例:<big id=\"ipv6-share\">0%</big>"
+
+msgid "<big id=\"ipv6-tx\">0B</big> total IPv6 upload"
+msgstr "IPv6 总上传量:<big id=\"ipv6-tx\">0B</big>"
+
+msgid "<big id=\"layer7-most-conn\">0</big> cause the most connections"
+msgstr "<big id=\"layer7-most-conn\">0</big> 是连接数最多的协议"
+
+msgid "<big id=\"layer7-most-rx\">0</big> cause the most download"
+msgstr "<big id=\"layer7-most-rx\">0</big> 是下载量最大的协议"
+
+msgid "<big id=\"layer7-most-tx\">0</big> cause the most upload"
+msgstr "<big id=\"layer7-most-tx\">0</big> 是上传量最大的协议"
+
+msgid "<big id=\"layer7-total\">0</big> different application protocols"
+msgstr "<big id=\"layer7-total\">0</big> 种不同的应用层协议"
+
+msgid "<big id=\"rx-total\">0</big> download"
+msgstr "下载:<big id=\"rx-total\">0</big>"
+
+msgid "<big id=\"tx-total\">0</big> upload"
+msgstr "上传:<big id=\"tx-total\">0</big>"
+
+msgid "Accounting period"
+msgstr "统计周期"
+
+msgid "Advanced Settings"
+msgstr "高级设置"
+
+msgid "Application"
+msgstr "应用层协议"
+
+msgid "Application Protocols"
+msgstr "应用层协议"
+
+msgid "Backup"
+msgstr "备份"
+
+msgid "Bandwidth Monitor"
+msgstr "带宽监控"
+
+msgid "CSV, grouped by IP"
+msgstr "CSV,按 IP 分组"
+
+msgid "CSV, grouped by MAC"
+msgstr "CSV,按 MAC 分组"
+
+msgid "CSV, grouped by protocol"
+msgstr "CSV,按协议分组"
+
+msgid ""
+"Changing the accounting interval type will invalidate existing databases!"
+"<br /><strong><a href=\"%s\">Download backup</a></strong>."
+msgstr ""
+"更改统计周期类型会使现有数据库无效!<br /><strong><a href=\"%s\">下载备份</"
+"a></strong>."
+
+msgid ""
+"Choose \"Day of month\" to restart the accounting period monthly on a "
+"specific date, e.g. every 3rd. Choose \"Fixed interval\" to restart the "
+"accounting period exactly every N days, beginning at a given date."
+msgstr ""
+"选择“每月的某一天”来设置统计周期的重启时间,例如:每个月的第 3 天。选择“固定周"
+"期”来设置从给定日期开始每 N 天重启统计周期。"
+
+msgid "Commit interval"
+msgstr "提交间隔"
+
+msgid "Compress database"
+msgstr "压缩数据库"
+
+msgid "Configuration"
+msgstr "配置"
+
+msgid "Conn."
+msgstr "连接"
+
+msgid "Connections"
+msgstr "连接"
+
+msgid "Connections / Host"
+msgstr "连接 / 主机"
+
+msgid "Database directory"
+msgstr "数据库目录"
+
+msgid ""
+"Database storage directory. One file per accounting period will be placed "
+"into this directory."
+msgstr "数据库存储目录。每个“统计周期”的文件将被放到这个目录中。"
+
+msgid "Day of month"
+msgstr "每月的某一天"
+
+msgid ""
+"Day of month to restart the accounting period. Use negative values to count "
+"towards the end of month, e.g. \"-5\" to specify the 27th of July or the "
+"24th of Februrary."
+msgstr ""
+"每个月重启统计周期的日期。使用负数表示从月底开始计算,例如:\"-5\" 可以表"
+"示 7 月份的 27 号或者 2 月份的 24 号。"
+
+msgid "Display"
+msgstr "显示"
+
+msgid "Down. (Bytes / Pkts.)"
+msgstr "下载(字节 / 数据包)"
+
+msgid "Download (Bytes / Packets)"
+msgstr "下载(字节 / 数据包)"
+
+msgid "Download / Application"
+msgstr "下载 / 应用层协议"
+
+msgid "Download Database Backup"
+msgstr "下载数据库备份"
+
+msgid "Dualstack enabled hosts"
+msgstr "双协议栈主机"
+
+msgid "Due date"
+msgstr "重置日期"
+
+msgid "Export"
+msgstr "导出"
+
+msgid "Family"
+msgstr "协议类型"
+
+msgid "Fixed interval"
+msgstr "固定周期"
+
+msgid "Force reload…"
+msgstr "强制重新加载..."
+
+msgid "General Settings"
+msgstr "基本设置"
+
+msgid "Generate Backup"
+msgstr "生成备份"
+
+msgid "Host"
+msgstr "主机"
+
+msgid "Hostname: <big id=\"bubble-hostname\">example.org</big>"
+msgstr "主机名:<big id=\"bubble-hostname\">example.org</big>"
+
+msgid "IPv4 vs. IPv6"
+msgstr "IPv4 与 IPv6"
+
+msgid "IPv6"
+msgstr "IPv6"
+
+msgid "Interval"
+msgstr "周期"
+
+msgid ""
+"Interval at which the temporary in-memory database is committed to the "
+"persistent database directory."
+msgstr "将内存中的临时数据库提交到持久性数据库目录的间隔时间。"
+
+msgid ""
+"Interval at which traffic counters of still established connections are "
+"refreshed from netlink information."
+msgstr "从 netlink 信息中刷新“已建立连接”的流量计数器的间隔时间。"
+
+msgid "Invalid or empty backup archive"
+msgstr "备份存档无效或为空"
+
+msgid "JSON dump"
+msgstr "JSON 输出"
+
+msgid "Length of accounting interval in days."
+msgstr "统计周期(天)。"
+
+msgid "Local interfaces"
+msgstr "本地接口"
+
+msgid "Local subnets"
+msgstr "本地子网"
+
+msgid "MAC"
+msgstr "MAC"
+
+msgid "Maximum entries"
+msgstr "最大条目"
+
+msgid ""
+"Maximum number of accounting periods to keep, use zero to keep databases "
+"forever."
+msgstr "保留的统计周期数据库的最大数量,设置 0 表示不限制。"
+
+msgid "Netlink Bandwidth Monitor"
+msgstr "网络带宽监视器"
+
+msgid "Netlink Bandwidth Monitor - Backup / Restore"
+msgstr "网络带宽监视器 - 备份 / 恢复"
+
+msgid "Netlink Bandwidth Monitor - Configuration"
+msgstr "网络带宽监视器 - 配置"
+
+msgid "No data recorded yet."
+msgstr "暂无数据记录。"
+
+msgid "Only conntrack streams from or to any of these networks are counted."
+msgstr "仅统计来自或目标为这些网络接口的连接流量。"
+
+msgid "Only conntrack streams from or to any of these subnets are counted."
+msgstr "仅统计来自或目标为这些子网的连接流量。"
+
+msgid "Preallocate database"
+msgstr "预分配数据库"
+
+msgid "Protocol"
+msgstr "协议"
+
+msgid "Protocol Mapping"
+msgstr "协议映射"
+
+msgid ""
+"Protocol mappings to distinguish traffic types per host, one mapping per "
+"line. The first value specifies the IP protocol, the second value the port "
+"number and the third column is the name of the mapped protocol."
+msgstr ""
+"协议映射用于区分流量类型,每行一条。第一个值指定 IP 协议类型,第二个值是"
+"端口号,第三个值是映射的协议名称。"
+
+msgid "Refresh interval"
+msgstr "刷新间隔"
+
+msgid "Restore"
+msgstr "恢复"
+
+msgid "Restore Database Backup"
+msgstr "恢复数据库备份"
+
+msgid "Select accounting period:"
+msgstr "选择统计周期:"
+
+msgid "Source IP"
+msgstr "源 IP"
+
+msgid "Start date"
+msgstr "起始日期"
+
+msgid "Start date of the first accounting period, e.g. begin of ISP contract."
+msgstr "第一个统计周期的起始日期,例如:ISP 合约的起始日期。"
+
+msgid "Stored periods"
+msgstr "储存周期"
+
+msgid ""
+"The Netlink Bandwidth Monitor (nlbwmon) is a lightweight, efficient traffic "
+"accounting program keeping track of bandwidth usage per host and protocol."
+msgstr ""
+"网络带宽监视器(nlbwmon)是一个轻量、高效的流量统计程序,可以统计每个主机和"
+"协议的带宽使用情况。"
+
+msgid "The following database files have been restored: %s"
+msgstr "以下数据库文件已恢复:%s"
+
+msgid ""
+"The maximum amount of entries that should be put into the database, setting "
+"the limit to 0 will allow databases to grow indefinitely."
+msgstr "数据库中的最大条目数量, 设置为 0 将允许数据库无限增长。"
+
+msgid "Traffic / Host"
+msgstr "流量 / 主机"
+
+msgid "Traffic Distribution"
+msgstr "流量分布"
+
+msgid "Up. (Bytes / Pkts.)"
+msgstr "上传(字节 / 数据包)"
+
+msgid "Upload (Bytes / Packets)"
+msgstr "上传(字节 / 数据包)"
+
+msgid "Upload / Application"
+msgstr "上传 / 应用层协议"
+
+msgid "Vendor: <big id=\"bubble-vendor\">Example Corp.</big>"
+msgstr "供应商: <big id=\"bubble-vendor\">Example Corp.</big>"
+
+msgid "Warning"
+msgstr "警告"
+
+msgid ""
+"Whether to gzip compress archive databases. Compressing the database files "
+"makes accessing old data slightly slower but helps to reduce storage "
+"requirements."
+msgstr ""
+"是否使用 gzip 压缩数据库存档。压缩数据库文件会使访问旧数据稍微慢一些, 但有助"
+"于减少存储占用空间。"
+
+msgid ""
+"Whether to preallocate the maximum possible database size in memory. This is "
+"mainly useful for memory constrained systems which might not be able to "
+"satisfy memory allocation after longer uptime periods."
+msgstr ""
+"是否预先分配数据库最大可能占用的内存大小。这主要适用于内存较小系统,这些系统"
+"在长时间运行之后可能无法满足数据库的内存需求。"
+
+msgid "no traffic"
+msgstr "无流量数据"
+
+msgid "other"
+msgstr "其他"
diff --git a/applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon b/applications/luci-app-nlbwmon/root/etc/uci-defaults/40_luci-nlbwmon
new file mode 100644 (file)
index 0000000..c977177
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@nlbwmon[-1]
+       add ucitrack nlbwmon
+       set ucitrack.@nlbwmon[-1].init=nlbwmon
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
diff --git a/applications/luci-app-noddos/Makefile b/applications/luci-app-noddos/Makefile
new file mode 100644 (file)
index 0000000..4c2b904
--- /dev/null
@@ -0,0 +1,18 @@
+# Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com)
+# Based on initial implementation by Stan Grishin (stangri@melmac.net)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=GPLv3
+PKG_MAINTAINER:=Steven Hessing <steven.hessing@gmail.com>
+
+LUCI_TITLE:=Noddos Service Web UI
+LUCI_DESCRIPTION:=Provides Web UI for Noddos service.
+LUCI_DEPENDS:=+luci +noddos
+LUCI_PKGARCH:=all
+PKG_RELEASE:=1
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails b/applications/luci-app-noddos/htdocs/cgi-bin/clientdetails
new file mode 100755 (executable)
index 0000000..6ff4ce5
--- /dev/null
@@ -0,0 +1,91 @@
+#!/usr/bin/lua
+
+-- clientdetails.lua : Provides details about client devices discovered by Noddos
+-- Copyright (C) 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+
+require "nixio.fs"
+
+print ("Content-type: Text/html\n")
+local info = os.getenv("QUERY_STRING")
+
+local params = {}
+local echo = {}
+
+function print_row(key)
+       print ("<tr><th>")
+       print (key)
+       print ("</th><td>")
+       print (device[key])
+       print ("</td></tr>")
+end
+
+for name, value in string.gmatch(info .. '&', '(.-)%=(.-)%&') do
+    value = string.gsub(value , '%+', ' ')
+    value = string.gsub(value , '%%(%x%x)', function(dpc)
+        return string.char(tonumber(dpc,16))
+               end )
+       params[name] = value
+
+    value = string.gsub(value, "%&", "&amp;")
+    value = string.gsub(value, "%<", "&lt;")
+    value = string.gsub(value, '%"', "&quot;")
+    echo[name] = value
+end
+
+device = {}
+profile = {}
+
+if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then
+        io.input("/var/lib/noddos/DeviceDump.json")
+        local t = io.read("*all")
+       local json = require "luci.jsonc"
+        local devdump = json.parse(t)
+        for i, v in ipairs(devdump) do
+                               if v.MacAddress == params["mac"] then
+                        device = v
+                end
+        end
+        io.input("/var/lib/noddos/DeviceProfiles.json")
+        t = io.read("*all")
+        local temp = json.parse(t)
+        for i, v in ipairs(temp) do
+                if device.DeviceProfileUuid == v.DeviceProfileUuid then
+                        profile = v
+                end
+        end
+end
+pagetop = [[
+<html>
+  <head>
+    <title>Client Details by Noddos</title>
+    <meta charset="utf-8">
+    <!--[if lt IE 9]><script src="/luci-static/bootstrap/html5.js?v=git-17.100.70571-29fabe2"></script><![endif]-->
+    <meta name="viewport" content="initial-scale=1.0">
+    <link rel="stylesheet" href="/luci-static/bootstrap/cascade.css?v=git-17.100.70571-29fabe2">
+    <link rel="stylesheet" media="only screen and (max-device-width: 854px)" href="/luci-static/bootstrap/mobile.css?v=git-17.100.70571-29fabe2" type="text/css" />
+    <link rel="shortcut icon" href="/luci-static/bootstrap/favicon.ico">
+    <script src="/luci-static/resources/xhr.js?v=git-17.100.70571-29fabe2"></script>
+  </head>
+  <body text=blue>
+    <h1>Client Details</h1>
+]]
+print (pagetop)
+
+if params["mac"] ~= nil then
+       print ("<table>")
+       for i, key in ipairs{"MacAddress", "Ipv4Address", "Ipv6Address", "DeviceProfileUuid", "DhcpHostname", "DhcpVendor", "SsdpFriendlyName", "SsdpLocation", "SsdpManufacturer", "SsdpModelName", "SsdpModelUrl", "SsdpSerialNumber", "SsdpServer","SsdpUserAgent", "MdnsDeviceUrl", "MdnsHw", "MdnsManufacturer", "MdnsModelName", "MdnsOs", "WsDiscoveryTypes", "WsDiscoveryXaddrs", "DnsQueries"} do
+               print_row(key)
+       end
+       print ("</table>")
+else 
+       print ("no mac address specified")
+end
+
+pagebase = [[<br><br>
+Client Details by
+<a href=http://www.noddos.io>Noddos</a>
+</body></html>
+]]
+
+print (pagebase)
diff --git a/applications/luci-app-noddos/luasrc/controller/noddos.lua b/applications/luci-app-noddos/luasrc/controller/noddos.lua
new file mode 100644 (file)
index 0000000..c45e24b
--- /dev/null
@@ -0,0 +1,10 @@
+-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+-- /usr/lib/lua/luci/controller/noddos.lua
+
+module("luci.controller.noddos", package.seeall)
+function index()
+    entry({"admin", "status", "noddos"}, template("noddos/clients"), _("Noddos Clients"), 3)
+    entry({"admin", "network", "noddos"}, cbi("noddos"), _("Noddos Client Tracking"), 55)
+end
+
diff --git a/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua b/applications/luci-app-noddos/luasrc/model/cbi/noddos.lua
new file mode 100644 (file)
index 0000000..3abb73b
--- /dev/null
@@ -0,0 +1,46 @@
+-- Copyright 2017 Steven Hessing (steven.hessing@gmail.com)
+-- This is free software, licensed under the GNU General Public License v3.
+-- /usr/lib/lua/luci/model/cbi/noddos.lua
+
+m = Map("noddos", translate("Client Firewall"),
+    translate("Noddos controls traffic from the clients on your network to the Internet. " ..
+        "This helps protect your network, the bandwidth on your Internet connection and " ..
+        "the Internet"))
+
+s = m:section(TypedSection, "noddos", translate("Server Settings"))
+s.anonymous = true
+s.addremove = false
+
+s:option(Flag, "rfc1918",
+    translate("Private networks"),
+    translate("Report traffic to private networks (10/8, 172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)")).default=false
+
+s:option(Flag, "upload",
+    translate("Upload anonimized traffic stats"),
+    translate("Uploading your statistics helps improving device recognition " ..
+        "and discovering hacked devices & botnets"))
+
+o = s:option(DynamicList, "whitelistipv4",
+    translate("Excluded IPv4 addresses"),
+    translate("Don't monitor these IPv4 addresses"))
+o.optional = true
+o.placeholder = "127.0.0.1 192.168.1.1"
+o.delimiter = " "
+o.datatype="list(ip4addr)"
+
+o = s:option(DynamicList, "whitelistipv6",
+    translate("Excluded IPv6 addresses"),
+    translate("Don't monitor these IPv6 addresses"))
+o.optional = true
+o.delimiter = " "
+o.datatype="list(ip6addr)"
+
+o = s:option(DynamicList, "whitelistmac",
+    translate("Excluded MAC addresses"),
+    translate("Don't monitor these MAC addresses"))
+o.optional = true
+o.delimiter = " "
+o.datatype="list(macaddr)"
+
+return m
+
diff --git a/applications/luci-app-noddos/luasrc/view/noddos/clients.htm b/applications/luci-app-noddos/luasrc/view/noddos/clients.htm
new file mode 100644 (file)
index 0000000..f2fb931
--- /dev/null
@@ -0,0 +1,111 @@
+<%#
+ Copyright (C) 2017 Steven Hessing <steven.hessing@gmail.com>
+  This is free software, licensed under the GNU General Public License v3.
+ /usr/lib/lua/luci/view/clients.htm
+-%>
+
+<%-
+
+    require "nixio.fs"
+    require "os"
+
+    local last_modified = "<boottime>"
+    local style = true
+    local v
+    local devdump
+
+    if nixio.fs.access("/var/lib/noddos/DeviceDump.json") then
+        last_modified = os.date("%c", nixio.fs.stat("/var/lib/noddos/DeviceDump.json")['mtime'])
+        io.input("/var/lib/noddos/DeviceDump.json")
+        t = io.read("*all")
+        devdump = luci.jsonc.parse(t)
+        io.input("/var/lib/noddos/DeviceProfiles.json")
+        t = io.read("*all")
+        temp = luci.jsonc.parse(t)
+        devicevalues = {}
+        for i, v in ipairs(temp) do
+            devicevalues[v.DeviceProfileUuid] = v
+        end
+    end
+-%>
+
+<%+header%>
+
+<div class="cbi-map" id="cbi-network">
+    <h2 name="content"><%:Clients%></h2>
+    <div class="cbi-map-descr"><%:The following clients have been discovered on the network. The last discovery was completed at %><%=last_modified%></div>
+
+    <fieldset class="cbi-section">
+        <legend><%:Recognized Clients%></legend>
+        <div class="cbi-section-node">
+            <table class="cbi-section-table">
+                <tr class="cbi-section-table-titles">
+                    <th class="cbi-section-table-cell"><%:Hostname%></th>
+                    <th class="cbi-section-table-cell"><%:IPv4%></th>
+                    <th class="cbi-section-table-cell"><%:MAC%></th>
+                    <th class="cbi-section-table-cell"><%:Manufacturer%></th>
+                    <th class="cbi-section-table-cell"><%:Model%></th>
+                    <th class="cbi-section-table-cell"><%:Class%></th>
+                </tr>
+
+                <%
+                    for i,v in ipairs(devdump) do
+                        if v.DeviceProfileUuid ~= "" then
+                %>
+                <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
+                    <td class="cbi-value-field"><%=v.Hostname%></td>
+                    <td class="cbi-value-field"><%=v.Ipv4Address%></td>
+                    <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td>
+                    <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Manufacturer%></td>
+                    <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].Model%></td>
+                    <td class="cbi-value-field"><%=devicevalues[v.DeviceProfileUuid].ThingClass%></td>
+                </tr>
+                <%
+                            style=false
+                        end
+                    end
+                %>
+            </table>
+        </div>
+    </fieldset>
+    <br />
+    <fieldset class="cbi-section">
+        <legend><%:Unrecognized Clients%></legend>
+        <div class="cbi-section-node">
+            <table class="cbi-section-table">
+                <tr class="cbi-section-table-titles">
+                    <th class="cbi-section-table-cell"><%:Hostname%></th>
+                    <th class="cbi-section-table-cell"><%:IPv4%></th>
+                    <th class="cbi-section-table-cell"><%:MAC%></th>
+                    <th class="cbi-section-table-cell"><%:Manufacturer%></th>
+                    <th class="cbi-section-table-cell"><%:Model%></th>
+                    <th class="cbi-section-table-cell"><%:DhcpVendor%></th>
+                    <th class="cbi-section-table-cell"><%:DhcpHostname%></th>
+                </tr>
+
+                <%
+                    for i,v in ipairs(devdump) do
+                        if v.DeviceProfileUuid == "" then
+                %>
+                <tr class="cbi-section-table-row cbi-rowstyle-<%=(style and 1 or 2)%>">
+                    <td class="cbi-value-field"><%=v.Hostname%></td>
+                    <td class="cbi-value-field"><%=v.Ipv4Address%></td>
+                    <td class="cbi-value-field"><a href="/cgi-bin/clientdetails?mac=<%=v.MacAddress%>"><%=v.MacAddress%></a></td>
+                    <td class="cbi-value-field"><%=v.SsdpManufacturer%></td>
+                    <td class="cbi-value-field"><%=v.SsdpModelName%></td>
+                    <td class="cbi-value-field"><%=v.DhcpVendor1%></td>
+                    <td class="cbi-value-field"><%=v.DhcpHostname%></td>
+                </tr>
+                <%
+                            style=false
+                        end
+                    end
+                %>
+            </table>
+        </div>
+    </fieldset>
+
+</div>
+
+<%+footer%>
+
diff --git a/applications/luci-app-noddos/po/ja/noddos.po b/applications/luci-app-noddos/po/ja/noddos.po
new file mode 100644 (file)
index 0000000..c6b4617
--- /dev/null
@@ -0,0 +1,111 @@
+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 2.0.4\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "Class"
+msgstr "クラス"
+
+msgid "Client Firewall"
+msgstr "クライアント ファイアウォール"
+
+msgid "Clients"
+msgstr "クライアント"
+
+msgid "DhcpHostname"
+msgstr "DHCP ホスト名"
+
+msgid "DhcpVendor"
+msgstr "DHCP ベンダー"
+
+msgid "Don't monitor these IPv4 addresses"
+msgstr "これらの IPv4 アドレスを監視しません。"
+
+msgid "Don't monitor these IPv6 addresses"
+msgstr "これらの IPv6 アドレスを監視しません。"
+
+msgid "Don't monitor these MAC addresses"
+msgstr "これらの MAC アドレスを監視しません。"
+
+msgid "Excluded IPv4 addresses"
+msgstr "除外する IPv4 アドレス"
+
+msgid "Excluded IPv6 addresses"
+msgstr "除外する IPv6 アドレス"
+
+msgid "Excluded MAC addresses"
+msgstr "除外する MAC アドレス"
+
+msgid "Hostname"
+msgstr "ホスト名"
+
+msgid "IPv4"
+msgstr "IPv4"
+
+msgid "MAC"
+msgstr "MAC"
+
+msgid "Manufacturer"
+msgstr "製造元"
+
+msgid "Model"
+msgstr "モデル"
+
+msgid "Noddos Client Tracking"
+msgstr "Noddos クライアント トラッキング"
+
+msgid "Noddos Clients"
+msgstr "Noddos クライアント"
+
+msgid ""
+"Noddos controls traffic from the clients on your network to the Internet. "
+"This helps protect your network, the bandwidth on your Internet connection "
+"and the Internet"
+msgstr ""
+"Noddos は、ネットワーク内のクライアントからインターネットへのトラフィックを制"
+"御します。これは、ネットワークとインターネット接続の帯域幅、インターネットの"
+"保護に役立ちます。"
+
+msgid "Private networks"
+msgstr "プライベート ネットワーク"
+
+msgid "Recognized Clients"
+msgstr "識別済クライアント"
+
+msgid ""
+"Report traffic to private networks (10/8, 172.16/12, 192.168/16, "
+"fd75:6b5d:352c:ed05::/64)"
+msgstr ""
+"プライベート ネットワークへのトラフィックについてのレポート(10/8, "
+"172.16/12, 192.168/16, fd75:6b5d:352c:ed05::/64)"
+
+msgid "Server Settings"
+msgstr "サーバー設定"
+
+msgid ""
+"The following clients have been discovered on the network. The last "
+"discovery was completed at"
+msgstr ""
+"以下のクライアントがネットワーク内で見つかりました。探索の最終実行日時:"
+
+msgid "Unrecognized Clients"
+msgstr "未識別クライアント"
+
+msgid "Upload anonimized traffic stats"
+msgstr "匿名トラフィック状況のアップロード"
+
+msgid ""
+"Uploading your statistics helps improving device recognition and discovering "
+"hacked devices & botnets"
+msgstr ""
+"デバイスの識別や、ハックされたデバイスとボットネットの発見の改善に役立てるた"
+"め、統計をアップロードします。"
diff --git a/applications/luci-app-noddos/po/templates/noddos.pot b/applications/luci-app-noddos/po/templates/noddos.pot
new file mode 100644 (file)
index 0000000..69d1357
--- /dev/null
@@ -0,0 +1,92 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Class"
+msgstr ""
+
+msgid "Client Firewall"
+msgstr ""
+
+msgid "Clients"
+msgstr ""
+
+msgid "DhcpHostname"
+msgstr ""
+
+msgid "DhcpVendor"
+msgstr ""
+
+msgid "Don't monitor these IPv4 addresses"
+msgstr ""
+
+msgid "Don't monitor these IPv6 addresses"
+msgstr ""
+
+msgid "Don't monitor these MAC addresses"
+msgstr ""
+
+msgid "Excluded IPv4 addresses"
+msgstr ""
+
+msgid "Excluded IPv6 addresses"
+msgstr ""
+
+msgid "Excluded MAC addresses"
+msgstr ""
+
+msgid "Hostname"
+msgstr ""
+
+msgid "IPv4"
+msgstr ""
+
+msgid "MAC"
+msgstr ""
+
+msgid "Manufacturer"
+msgstr ""
+
+msgid "Model"
+msgstr ""
+
+msgid "Noddos Client Tracking"
+msgstr ""
+
+msgid "Noddos Clients"
+msgstr ""
+
+msgid ""
+"Noddos controls traffic from the clients on your network to the Internet. "
+"This helps protect your network, the bandwidth on your Internet connection "
+"and the Internet"
+msgstr ""
+
+msgid "Private networks"
+msgstr ""
+
+msgid "Recognized Clients"
+msgstr ""
+
+msgid ""
+"Report traffic to private networks (10/8, 172.16/12, 192.168/16, "
+"fd75:6b5d:352c:ed05::/64)"
+msgstr ""
+
+msgid "Server Settings"
+msgstr ""
+
+msgid ""
+"The following clients have been discovered on the network. The last "
+"discovery was completed at"
+msgstr ""
+
+msgid "Unrecognized Clients"
+msgstr ""
+
+msgid "Upload anonimized traffic stats"
+msgstr ""
+
+msgid ""
+"Uploading your statistics helps improving device recognition and discovering "
+"hacked devices & botnets"
+msgstr ""
diff --git a/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos b/applications/luci-app-noddos/root/etc/uci-defaults/40_luci-noddos
new file mode 100644 (file)
index 0000000..17abbc4
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh
+
+# Copyright (C) 2017 Steven Hessing (steven.hessing@live.com)
+# This is free software, licensed under the GNU General Public License v3
+
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@noddos[-1]
+       add ucitrack noddos
+       set ucitrack.@noddos[-1].init=noddos
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
index 1461c1d..499176c 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2014-06-21 19:36+0200\n"
-"Last-Translator: Éder <eder.grigorio@openmailbox.org>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-20 18:01-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
 
 msgid "Active MID announcements"
 msgstr ""
@@ -59,7 +59,6 @@ msgstr ""
 "Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'"
 
 # 20140621: edersg: tradução
-#, fuzzy
 msgid "Can only be a valid IPv6 address or 'default'"
 msgstr ""
 "Somente pode ser um endereço IPv4 ou IPv6 válidos ou um endereço 'padrão'"
@@ -173,7 +172,6 @@ msgstr ""
 "Validade do <abbr title=\"Host and network association, Associação de "
 "equipamentos e redes\">HNA</abbr>"
 
-#, fuzzy
 msgid "HNA6 Announcements"
 msgstr ""
 "Anúncios do <abbr title=\"Host and network association, Associação de "
@@ -215,7 +213,6 @@ msgstr ""
 "Equipamentos em uma rede roteada por OLSR podem anunciar conectividade para "
 "redes externas usando mensagens HNA."
 
-#, fuzzy
 msgid ""
 "Hosts in a OLSR routed network can announce connecitivity to external "
 "networks using HNA6 messages."
@@ -496,7 +493,6 @@ msgstr ""
 "> reduzir LQ para todos os nós nesta interface em 20%: padrão 0.8"
 
 # 20140621: edersg: tradução
-#, fuzzy
 msgid ""
 "Multiply routes with the factor given here. Allowed values are between 0.01 "
 "and 1.0. It is only used when LQ-Level is greater than 0. Examples:<br /"
@@ -551,7 +547,6 @@ msgstr ""
 "OLSR - Anúncios <abbr title=\"Host and network association, Associação de "
 "equipamentos e redes\">HNA</abbr>"
 
-#, fuzzy
 msgid "OLSR - HNA6-Announcements"
 msgstr ""
 "OLSR - Anúncios <abbr title=\"Host and network association, Associação de "
@@ -654,7 +649,6 @@ msgstr ""
 "durante o funcionamento do olsrd. O padrão é 0.0.0.0, que faz com que o "
 "endereço da primeira interface seja usado."
 
-#, fuzzy
 msgid ""
 "Sets the main IP (originator ip) of the router. This IP will NEVER change "
 "during the uptime of olsrd. Default is ::, which triggers usage of the IP of "
@@ -857,7 +851,6 @@ msgstr ""
 "and network association, Associação de equipamentos e redes\">HNA</abbr> "
 "local de 0.0.0.0/0, ::ffff:0:0/96 ou 2000::/3. O padrão é \"ambos\"."
 
-#, fuzzy
 msgid ""
 "Which kind of uplink is exported to the other mesh nodes. An uplink is "
 "detected by looking for a local HNA6 ::ffff:0:0/96 or 2000::/3. Default "
index 1bbee83..dc77182 100644 (file)
@@ -7,192 +7,725 @@ require("luci.model.uci")
 
 local knownParams = {
        --
-       --      Widget                  Name                                                    Default(s)                                                                                                              Description     Option(s)
-       --
+       --Widget
+       --      Name
+       --      Default(s)
+       --      Description
+       --      Option(s)
 
        { "Service", {
-               -- initialisation and daemon options
-               { ListValue,    "verb",                                                 { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },                                               translate("Set output verbosity") },
-               { Flag,                 "mlock",                                                0,                                                                                                                              translate("Disable Paging") },
-               { Flag,                 "disable_occ",                                  0,                                                                                                                              translate("Disable options consistency check") },
-       --      { Value,                "user",                                                 "root",                                                                                                                 translate("Set UID to user") },
-       --      { Value,                "group",                                                "root",                                                                                                                 translate("Set GID to group") },
-               { Value,                "cd",                                                   "/etc/openvpn",                                                                                                 translate("Change to directory before initialization") },
-               { Value,                "chroot",                                               "/var/run",                                                                                                             translate("Chroot to directory after initialization") },
-       --      { Value,                "daemon",                                               "Instance-Name",                                                                                                translate("Daemonize after initialization") },
-       --      { Value,                "syslog",                                               "Instance-Name",                                                                                                translate("Output to syslog and do not daemonize") },
-               { Flag,                 "passtos",                                              0,                                                                                                                              translate("TOS passthrough (applies to IPv4 only)") },
-       --      { Value,                "inetd",                                                "nowait Instance-Name",                                                                                 translate("Run as an inetd or xinetd server") },
-               { Value,                "log",                                                  "/var/log/openvpn.log",                                                                                 translate("Write log to file") },
-               { Value,                "log_append",                                   "/var/log/openvpn.log",                                                                                 translate("Append log to file") },
-               { Flag,                 "suppress_timestamps",                  0,                                                                                                                              translate("Don't log timestamps") },
-       --      { Value,                "writepid",                                             "/var/run/openvpn.pid",                                                                                 translate("Write process ID to file") },
-               { Value,                "nice",                                                 0,                                                                                                                              translate("Change process priority") },
-               { Flag,                 "fast_io",                                              0,                                                                                                                              translate("Optimize TUN/TAP/UDP writes") },
-               { Value,                "echo",                                                 "some params echoed to log",                                                                    translate("Echo parameters to log") },
-               { ListValue,    "remap_usr1",                                   { "SIGHUP", "SIGTERM" },                                                                                translate("Remap SIGUSR1 signals") },
-               { Value,                "status",                                               "/var/run/openvpn.status 5",                                                                    translate("Write status to file every n seconds") },
-               { Value,                "status_version",                               { 1, 2 },                                                                                                               translate("Status file format version") },      -- status
-               { Value,                "mute",                                                 5,                                                                                                                              translate("Limit repeated log messages") },
-
-               { Value,                "up",                                                   "/usr/bin/ovpn-up",                                                                                             translate("Shell cmd to execute after tun device open") },
-               { Value,                "up_delay",                                             5,                                                                                                                              translate("Delay tun/tap open and up script execution") },
-               { Value,                "down",                                                 "/usr/bin/ovpn-down",                                                                                   translate("Shell cmd to run after tun device close") },
-               { Flag,                 "down_pre",                                             0,                                                                                                                              translate("Call down cmd/script before TUN/TAP close") },
-               { Flag,                 "up_restart",                                   0,                                                                                                                              translate("Run up/down scripts for all restarts") },
-               { Value,                "route_up",                                             "/usr/bin/ovpn-routeup",                                                                                translate("Execute shell cmd after routes are added") },
-               { Value,                "ipchange",                                             "/usr/bin/ovpn-ipchange",                                                                               translate("Execute shell command on remote ip change"), { mode="p2p" } },
-               { DynamicList,  "setenv",                                               { "VAR1 value1", "VAR2 value2" },                                                               translate("Pass environment variables to script") },
-               { Value,                "tls_verify",                                   "/usr/bin/ovpn-tlsverify",                                                                              translate("Shell command to verify X509 name") },
-               { Value,                "client_connect",                               "/usr/bin/ovpn-clientconnect",                                                                  translate("Run script cmd on client connection") },
-               { Flag,                 "client_disconnect",                    0,                                                                                                                              translate("Run script cmd on client disconnection") },
-               { Value,                "learn_address",                                "/usr/bin/ovpn-learnaddress",                                                                   translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") },
-               { Value,                "auth_user_pass_verify",                "/usr/bin/ovpn-userpass via-env",                                                               translate("Executed in server mode on new client connections, when the client is still untrusted") },
-               { ListValue,    "script_security",                              { 0, 1, 2, 3 },                                                                                                 translate("Policy level over usage of external programs and scripts") },
+       -- initialisation and daemon options
+               { ListValue,
+                       "verb",
+                       { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 },
+                       translate("Set output verbosity") },
+               { Flag,
+                       "mlock",
+                       0,
+                       translate("Disable Paging") },
+               { Flag,
+                       "disable_occ",
+                       0,
+                       translate("Disable options consistency check") },
+       --      { Value,
+       --              "user",
+       --              "root",
+       --              translate("Set UID to user") },
+       --      { Value,
+       --              "group",
+       --              "root",
+       --              translate("Set GID to group") },
+               { Value,
+                       "cd",
+                       "/etc/openvpn",
+                       translate("Change to directory before initialization") },
+               { Value,
+                       "chroot",
+                       "/var/run",
+                       translate("Chroot to directory after initialization") },
+       --      { Value,
+       --              "daemon",
+       --              "Instance-Name",
+       --              translate("Daemonize after initialization") },
+       --      { Value,
+       --              "syslog",
+       --              "Instance-Name",
+       --              translate("Output to syslog and do not daemonize") },
+               { Flag,
+                       "passtos",
+                       0,
+                       translate("TOS passthrough (applies to IPv4 only)") },
+       --      { Value,
+       --              "inetd",
+       --              "nowait Instance-Name",
+       --              translate("Run as an inetd or xinetd server") },
+               { Value,
+                       "log",
+                       "/var/log/openvpn.log",
+                       translate("Write log to file") },
+               { Value,
+                       "log_append",
+                       "/var/log/openvpn.log",
+                       translate("Append log to file") },
+               { Flag,
+                       "suppress_timestamps",
+                       0,
+                       translate("Don't log timestamps") },
+       --      { Value,
+       --              "writepid",
+       --              "/var/run/openvpn.pid",
+       --              translate("Write process ID to file") },
+               { Value,
+                       "nice",
+                       0,
+                       translate("Change process priority") },
+               { Flag,
+                       "fast_io",
+                       0,
+                       translate("Optimize TUN/TAP/UDP writes") },
+               { Value,
+                       "echo",
+                       "some params echoed to log",
+                       translate("Echo parameters to log") },
+               { ListValue,
+                       "remap_usr1",
+                       { "SIGHUP", "SIGTERM" },
+                       translate("Remap SIGUSR1 signals") },
+               { Value,
+                       "status",
+                       "/var/run/openvpn.status 5",
+                       translate("Write status to file every n seconds") },
+               { Value,
+                       "status_version",
+                       { 1, 2 },
+                       translate("Status file format version") },      -- status
+               { Value,
+                       "mute",
+                       5,
+                       translate("Limit repeated log messages") },
+               { Value,
+                       "up",
+                       "/usr/bin/ovpn-up",
+                       translate("Shell cmd to execute after tun device open") },
+               { Value,
+                       "up_delay",
+                       5,
+                       translate("Delay tun/tap open and up script execution") },
+               { Value,
+                       "down",
+                       "/usr/bin/ovpn-down",
+                       translate("Shell cmd to run after tun device close") },
+               { Flag,
+                       "down_pre",
+                       0,
+                       translate("Call down cmd/script before TUN/TAP close") },
+               { Flag,
+                       "up_restart",
+                       0,
+                       translate("Run up/down scripts for all restarts") },
+               { Value,
+                       "route_up",
+                       "/usr/bin/ovpn-routeup",
+                       translate("Execute shell cmd after routes are added") },
+               { Value,
+                       "ipchange",
+                       "/usr/bin/ovpn-ipchange",
+                       translate("Execute shell command on remote ip change"),
+                       { mode="p2p" } },
+               { DynamicList,
+                       "setenv",
+                       { "VAR1 value1", "VAR2 value2" },
+                       translate("Pass environment variables to script") },
+               { Value,
+                       "tls_verify",
+                       "/usr/bin/ovpn-tlsverify",
+                       translate("Shell command to verify X509 name") },
+               { Value,
+                       "client_connect",
+                       "/usr/bin/ovpn-clientconnect",
+                       translate("Run script cmd on client connection") },
+               { Flag,
+                       "client_disconnect",
+                       0,
+                       translate("Run script cmd on client disconnection") },
+               { Value,
+                       "learn_address",
+                       "/usr/bin/ovpn-learnaddress",
+                       translate("Executed in server mode whenever an IPv4 address/route or MAC address is added to OpenVPN's internal routing table") },
+               { Value,
+                       "auth_user_pass_verify",
+                       "/usr/bin/ovpn-userpass via-env",
+                       translate("Executed in server mode on new client connections, when the client is still untrusted") },
+               { ListValue,
+                       "script_security",
+                       { 0, 1, 2, 3 },
+                       translate("Policy level over usage of external programs and scripts") },
        } },
 
        { "Networking", {
-               -- socket config
-               { ListValue,    "mode",                                                 { "p2p", "server" },                                                                                    translate("Major mode") },
-               { Value,                "local",                                                "0.0.0.0",                                                                                                              translate("Local host name or ip address") },
-               { Value,                "port",                                                 1194,                                                                                                                   translate("TCP/UDP port # for both local and remote") },
-               { Value,                "lport",                                                1194,                                                                                                                   translate("TCP/UDP port # for local (default=1194)") },
-               { Value,                "rport",                                                1194,                                                                                                                   translate("TCP/UDP port # for remote (default=1194)") },
-               { Flag,                 "float",                                                0,                                                                                                                              translate("Allow remote to change its IP or port") },
-               { Flag,                 "nobind",                                               0,                                                                                                                              translate("Do not bind to local address and port") },
-
-               { Value,                "dev",                                                  "tun0",                                                                                                                 translate("tun/tap device") },
-               { ListValue,    "dev_type",                                             { "tun", "tap" },                                                                                               translate("Type of used device") },
-               { Value,                "dev_node",                                             "/dev/net/tun",                                                                                                 translate("Use tun/tap device node") },
-               { Flag,                 "tun_ipv6",                                             0,                                                                                                                              translate("Make tun device IPv6 capable") },
-
-               { Value,                "ifconfig",                                             "10.200.200.3 10.200.200.1",                                                                    translate("Set tun/tap adapter parameters") },
-               { Flag,                 "ifconfig_noexec",                              0,                                                                                                                              translate("Don't actually execute ifconfig") },
-               { Flag,                 "ifconfig_nowarn",                              0,                                                                                                                              translate("Don't warn on ifconfig inconsistencies") },
-
-               { DynamicList,  "route",                                                "10.123.0.0 255.255.0.0",                                                                               translate("Add route after establishing connection") },
-               { Value,                "route_gateway",                                "10.234.1.1",                                                                                                   translate("Specify a default gateway for routes") },
-               { Value,                "route_delay",                                  0,                                                                                                                              translate("Delay n seconds after connection") },
-               { Flag,                 "route_noexec",                                 0,                                                                                                                              translate("Don't add routes automatically") },
-               { Flag,                 "route_nopull",                                 0,                                                                                                                              translate("Don't pull routes automatically") },
-
-               { ListValue,    "mtu_disc",                                             { "yes", "maybe", "no" },                                                                               translate("Enable Path MTU discovery") },
-               { Flag,                 "mtu_test",                                             0,                                                                                                                              translate("Empirically measure MTU") },
-               { ListValue,                    "comp_lzo",                             { "yes", "no", "adaptive" },                                                                                                                            translate("Use fast LZO compression") },
-               { Flag,                 "comp_noadapt",                                 0,                                                                                                                              translate("Don't use adaptive lzo compression"),        { comp_lzo=1 } },
-               { Value,                "link_mtu",                                             1500,                                                                                                                   translate("Set TCP/UDP MTU") },
-               { Value,                "tun_mtu",                                              1500,                                                                                                                   translate("Set tun/tap device MTU") },
-               { Value,                "tun_mtu_extra",                                1500,                                                                                                                   translate("Set tun/tap device overhead") },
-               { Value,                "fragment",                                             1500,                                                                                                                   translate("Enable internal datagram fragmentation"),    { proto="udp" } },
-               { Value,                "mssfix",                                               1500,                                                                                                                   translate("Set upper bound on TCP MSS"),        { proto="udp" } },
-               { Value,                "sndbuf",                                               65536,                                                                                                                  translate("Set the TCP/UDP send buffer size") },
-               { Value,                "rcvbuf",                                               65536,                                                                                                                  translate("Set the TCP/UDP receive buffer size") },
-               { Value,                "txqueuelen",                                   100,                                                                                                                    translate("Set tun/tap TX queue length") },
-               { Value,                "shaper",                                               10240,                                                                                                                  translate("Shaping for peer bandwidth") },
-
-               { Value,                "inactive",                                             240,                                                                                                                    translate("tun/tap inactivity timeout") },
-               { Value,                "keepalive",                                    "10 60",                                                                                                                translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") },
-               { Value,                "ping",                                                 30,                                                                                                                             translate("Ping remote every n seconds over TCP/UDP port") },
-               { Value,                "ping_exit",                                    120,                                                                                                                    translate("Remote ping timeout") },
-               { Value,                "ping_restart",                                 60,                                                                                                                             translate("Restart after remote ping timeout") },
-               { Flag,                 "ping_timer_rem",                               0,                                                                                                                              translate("Only process ping timeouts if routes exist") },
-
-               { Flag,                 "persist_tun",                                  0,                                                                                                                              translate("Keep tun/tap device open on restart") },
-               { Flag,                 "persist_key",                                  0,                                                                                                                              translate("Don't re-read key on restart") },
-               { Flag,                 "persist_local_ip",                             0,                                                                                                                              translate("Keep local IP address on restart") },
-               { Flag,                 "persist_remote_ip",                    0,                                                                                                                              translate("Keep remote IP address on restart") },
-
-               -- management channel
-               { Value,                "management",                                   "127.0.0.1 31194 /etc/openvpn/mngmt-pwds",                                              translate("Enable management interface on <em>IP</em> <em>port</em>") },
-               { Flag,                 "management_query_passwords",   0,                                                                                                                              translate("Query management channel for private key") },        -- management
-               { Flag,                 "management_hold",                              0,                                                                                                                              translate("Start OpenVPN in a hibernating state") },    -- management
-               { Value,                "management_log_cache",                 100,                                                                                                                    translate("Number of lines for log file history") },    -- management
-               { ListValue,    "topology",                                             { "net30", "p2p", "subnet" },                                                                   translate("'net30', 'p2p', or 'subnet'"),       {dev_type="tun" } },
+       -- socket config
+               { ListValue,
+                       "mode",
+                       { "p2p", "server" },
+                       translate("Major mode") },
+               { Value,
+                       "local",
+                       "0.0.0.0",
+                       translate("Local host name or ip address") },
+               { Value,
+                       "port",
+                       1194,
+                       translate("TCP/UDP port # for both local and remote") },
+               { Value,
+                       "lport",
+                       1194,
+                       translate("TCP/UDP port # for local (default=1194)") },
+               { Value,
+                       "rport",
+                       1194,
+                       translate("TCP/UDP port # for remote (default=1194)") },
+               { Flag,
+                       "float",
+                       0,
+                       translate("Allow remote to change its IP or port") },
+               { Flag,
+                       "nobind",
+                       0,
+                       translate("Do not bind to local address and port") },
+               { Value,
+                       "dev",
+                       "tun0",
+                       translate("tun/tap device") },
+               { ListValue,
+                       "dev_type",
+                       { "tun", "tap" },
+                       translate("Type of used device") },
+               { Value,
+                       "dev_node",
+                       "/dev/net/tun",
+                       translate("Use tun/tap device node") },
+               { Flag,
+                       "tun_ipv6",
+                       0,
+                       translate("Make tun device IPv6 capable") },
+               { Value,
+                       "ifconfig",
+                       "10.200.200.3 10.200.200.1",
+                       translate("Set tun/tap adapter parameters") },
+               { Flag,
+                       "ifconfig_noexec",
+                       0,
+                       translate("Don't actually execute ifconfig") },
+               { Flag,
+                       "ifconfig_nowarn",
+                       0,
+                       translate("Don't warn on ifconfig inconsistencies") },
+               { DynamicList,
+                       "route",
+                       "10.123.0.0 255.255.0.0",
+                       translate("Add route after establishing connection") },
+               { Value,
+                       "route_gateway",
+                       "10.234.1.1",
+                       translate("Specify a default gateway for routes") },
+               { Value,
+                       "route_delay",
+                       0,
+                       translate("Delay n seconds after connection") },
+               { Flag,
+                       "route_noexec",
+                       0,
+                       translate("Don't add routes automatically") },
+               { Flag,
+                       "route_nopull",
+                       0,
+                       translate("Don't pull routes automatically") },
+               { ListValue,
+                       "mtu_disc",
+                       { "yes", "maybe", "no" },
+                       translate("Enable Path MTU discovery") },
+               { Flag,
+                       "mtu_test",
+                       0,
+                       translate("Empirically measure MTU") },
+               { ListValue,
+                       "comp_lzo",
+                       { "yes", "no", "adaptive" },
+                       translate("Use fast LZO compression") },
+               { Flag,
+                       "comp_noadapt",
+                       0,
+                       translate("Don't use adaptive lzo compression"),
+                       { comp_lzo=1 } },
+               { Value,
+                       "link_mtu",
+                       1500,
+                       translate("Set TCP/UDP MTU") },
+               { Value,
+                       "tun_mtu",
+                       1500,
+                       translate("Set tun/tap device MTU") },
+               { Value,
+                       "tun_mtu_extra",
+                       1500,
+                       translate("Set tun/tap device overhead") },
+               { Value,
+                       "fragment",
+                       1500,
+                       translate("Enable internal datagram fragmentation"),
+                       { proto="udp" } },
+               { Value,
+                       "mssfix",
+                       1500,
+                       translate("Set upper bound on TCP MSS"),
+                       { proto="udp" } },
+               { Value,
+                       "sndbuf",
+                       65536,
+                       translate("Set the TCP/UDP send buffer size") },
+               { Value,
+                       "rcvbuf",
+                       65536,
+                       translate("Set the TCP/UDP receive buffer size") },
+               { Value,
+                       "txqueuelen",
+                       100,
+                       translate("Set tun/tap TX queue length") },
+               { Value,
+                       "shaper",
+                       10240,
+                       translate("Shaping for peer bandwidth") },
+               { Value,
+                       "inactive",
+                       240,
+                       translate("tun/tap inactivity timeout") },
+               { Value,
+                       "keepalive",
+                       "10 60",
+                       translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") },
+               { Value,
+                       "ping",
+                       30,
+                       translate("Ping remote every n seconds over TCP/UDP port") },
+               { Value,
+                       "ping_exit",
+                       120,
+                       translate("Remote ping timeout") },
+               { Value,
+                       "ping_restart",
+                       60,
+                       translate("Restart after remote ping timeout") },
+               { Flag,
+                       "ping_timer_rem",
+                       0,
+                       translate("Only process ping timeouts if routes exist") },
+               { Flag,
+                       "persist_tun",
+                       0,
+                       translate("Keep tun/tap device open on restart") },
+               { Flag,
+                       "persist_key",
+                       0,
+                       translate("Don't re-read key on restart") },
+               { Flag,
+                       "persist_local_ip",
+                       0,
+                       translate("Keep local IP address on restart") },
+               { Flag,
+                       "persist_remote_ip",
+                       0,
+                       translate("Keep remote IP address on restart") },
+       -- management channel
+               { Value,
+                       "management",
+                       "127.0.0.1 31194 /etc/openvpn/mngmt-pwds",
+                       translate("Enable management interface on <em>IP</em> <em>port</em>") },
+       -- management
+               { Flag,
+                       "management_query_passwords",
+                       0,
+                       translate("Query management channel for private key") },
+       -- management
+               { Flag,
+                       "management_hold",
+                       0,
+                       translate("Start OpenVPN in a hibernating state") },
+       -- management
+               { Value,
+                       "management_log_cache",
+                       100,
+                       translate("Number of lines for log file history") },
+               { ListValue,
+                       "topology",
+                       { "net30", "p2p", "subnet" },
+                       translate("'net30', 'p2p', or 'subnet'"),
+                       {dev_type="tun" } },
        } },
 
        { "VPN", {
-               { Value,                "server",                                               "10.200.200.0 255.255.255.0",                                                                   translate("Configure server mode"),     { server_mode="1" } },
-               { Value,                "server_bridge",                                "10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250",             translate("Configure server bridge"),   { server_mode="1" } },
-               { DynamicList,  "push",                                                 { "redirect-gateway", "comp-lzo" },                                                             translate("Push options to peer"),      { server_mode="1" } },
-               { Flag,                 "push_reset",                                   0,                                                                                                                              translate("Don't inherit global push options"), { server_mode="1" } },
-               { Flag,                 "disable",                                              0,                                                                                                                              translate("Client is disabled"),        { server_mode="1" } },
-               { Value,                "ifconfig_pool",                                "10.200.200.100 10.200.200.150 255.255.255.0",                                  translate("Set aside a pool of subnets"),       { server_mode="1" } },
-               { Value,                "ifconfig_pool_persist",                "/etc/openvpn/ipp.txt 600",                                                                             translate("Persist/unpersist ifconfig-pool"),   { server_mode="1" } },
---             { Flag,                 "ifconfig_pool_linear",                 0,                                                                                                                              translate("Use individual addresses rather than /30 subnets"),  { server_mode="1" } }, -- deprecated and replaced by --topology p2p
-               { Value,                "ifconfig_push",                                "10.200.200.1 255.255.255.255",                                                                 translate("Push an ifconfig option to remote"), { server_mode="1" } },
-               { Value,                "iroute",                                               "10.200.200.0 255.255.255.0",                                                                   translate("Route subnet to client"),    { server_mode="1" } },
-               { Flag,                 "client_to_client",                             0,                                                                                                                              translate("Allow client-to-client traffic"),    { server_mode="1" } },
-               { Flag,                 "duplicate_cn",                                 0,                                                                                                                              translate("Allow multiple clients with same certificate"),      { server_mode="1" } },
-               { Value,                "client_config_dir",                    "/etc/openvpn/ccd",                                                                                             translate("Directory for custom client config files"),  { server_mode="1" } },
-               { Flag,                 "ccd_exclusive",                                0,                                                                                                                              translate("Refuse connection if no custom client config"),      { server_mode="1" } },
-               { Value,                "tmp_dir",                                              "/var/run/openvpn",                                                                                             translate("Temporary directory for client-connect return file"),        { server_mode="1" } },
-               { Value,                "hash_size",                                    "256 256",                                                                                                              translate("Set size of real and virtual address hash tables"),  { server_mode="1" } },
-               { Value,                "bcast_buffers",                                256,                                                                                                                    translate("Number of allocated broadcast buffers"),     { server_mode="1" } },
-               { Value,                "tcp_queue_limit",                              64,                                                                                                                             translate("Maximum number of queued TCP output packets"),       { server_mode="1" } },
-               { Value,                "max_clients",                                  10,                                                                                                                             translate("Allowed maximum of connected clients"),      { server_mode="1" } },
-               { Value,                "max_routes_per_client",                256,                                                                                                                    translate("Allowed maximum of internal"),       { server_mode="1" } },
-               { Value,                "connect_freq",                                 "3 10",                                                                                                                 translate("Allowed maximum of new connections"),        { server_mode="1" } },
-               { Flag,                 "client_cert_not_required",             0,                                                                                                                              translate("Don't require client certificate"),  { server_mode="1" } },
-               { Flag,                 "username_as_common_name",              0,                                                                                                                              translate("Use username as common name"),       { server_mode="1" } },
-               { Flag,                 "client",                                               0,                                                                                                                              translate("Configure client mode"),     { server_mode="0" }, { server_mode="" } },
-               { Flag,                 "pull",                                                 0,                                                                                                                              translate("Accept options pushed from server"), { client="1" } },
-               { Value,                "auth_user_pass",                               "/etc/openvpn/userpass.txt",                                                                    translate("Authenticate using username/password"),      { client="1" } },
-               { ListValue,    "auth_retry",                                   { "none", "nointeract", "interact" },                                                   translate("Handling of authentication failures"),       { client="1" } },
-               { Value,                "explicit_exit_notify",                 1,                                                                                                                              translate("Send notification to peer on disconnect"),   { client="1" } },
-               { DynamicList,  "remote",                                               "1.2.3.4",                                                                                                              translate("Remote host name or ip address"),    { client="1" } },
-               { Flag,                 "remote_random",                                1,                                                                                                                              translate("Randomly choose remote server"),     { client="1" } },
-               { ListValue,    "proto",                                                { "udp", "tcp-client", "tcp-server" },                                                  translate("Use protocol"),      { client="1" } },
-               { Value,                "connect_retry",                                5,                                                                                                                              translate("Connection retry interval"), { proto="tcp-client" }, { client="1" } },
-               { Value,                "http_proxy",                                   "192.168.1.100 8080",                                                                                   translate("Connect to remote host through an HTTP proxy"),      { client="1" } },
-               { Flag,                 "http_proxy_retry",                             0,                                                                                                                              translate("Retry indefinitely on HTTP proxy errors"),   { client="1" } },
-               { Value,                "http_proxy_timeout",                   5,                                                                                                                              translate("Proxy timeout in seconds"),  { client="1" } },
-               { DynamicList,  "http_proxy_option",                    { "VERSION 1.0", "AGENT OpenVPN/2.0.9" },                                               translate("Set extended HTTP proxy options"),   { client="1" } },
-               { Value,                "socks_proxy",                                  "192.168.1.200 1080",                                                                                   translate("Connect through Socks5 proxy"),      { client="1" } },
-               { Value,                "socks_proxy_retry",                    5,                                                                                                                              translate("Retry indefinitely on Socks proxy errors"),  { client="1" } },       -- client && socks_proxy
-               { Value,                "resolv_retry",                                 "infinite",                                                                                                             translate("If hostname resolve fails, retry"),  { client="1" } },
-               { ListValue,    "redirect_gateway",                             { "", "local", "def1", "local def1" },                                                  translate("Automatically redirect default route"),      { client="1" } },
+               { Value,
+                       "server",
+                       "10.200.200.0 255.255.255.0",
+                       translate("Configure server mode"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "server_bridge",
+                       "10.200.200.1 255.255.255.0 10.200.200.200 10.200.200.250",
+                       translate("Configure server bridge"),
+                       { client="0" }, { client="" } },
+               { DynamicList,
+                       "push",
+                       { "redirect-gateway", "comp-lzo" },
+                       translate("Push options to peer"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "push_reset",
+                       0,
+                       translate("Don't inherit global push options"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "disable",
+                       0,
+                       translate("Client is disabled"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "ifconfig_pool",
+                       "10.200.200.100 10.200.200.150 255.255.255.0",
+                       translate("Set aside a pool of subnets"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "ifconfig_pool_persist",
+                       "/etc/openvpn/ipp.txt 600",
+                       translate("Persist/unpersist ifconfig-pool"),
+                       { client="0" }, { client="" } },
+       -- deprecated and replaced by --topology p2p
+       --      { Flag,
+       --              "ifconfig_pool_linear",
+       --              0,
+       --              translate("Use individual addresses rather than /30 subnets"),
+       --              { client="0" }, { client="" } },
+               { Value,
+                       "ifconfig_push",
+                       "10.200.200.1 255.255.255.255",
+                       translate("Push an ifconfig option to remote"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "iroute",
+                       "10.200.200.0 255.255.255.0",
+                       translate("Route subnet to client"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "client_to_client",
+                       0,
+                       translate("Allow client-to-client traffic"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "duplicate_cn",
+                       0,
+                       translate("Allow multiple clients with same certificate"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "client_config_dir",
+                       "/etc/openvpn/ccd",
+                       translate("Directory for custom client config files"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "ccd_exclusive",
+                       0,
+                       translate("Refuse connection if no custom client config"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "tmp_dir",
+                       "/var/run/openvpn",
+                       translate("Temporary directory for client-connect return file"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "hash_size",
+                       "256 256",
+                       translate("Set size of real and virtual address hash tables"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "bcast_buffers",
+                       256,
+                       translate("Number of allocated broadcast buffers"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "tcp_queue_limit",
+                       64,
+                       translate("Maximum number of queued TCP output packets"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "max_clients",
+                       10,
+                       translate("Allowed maximum of connected clients"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "max_routes_per_client",
+                       256,
+                       translate("Allowed maximum of internal"),
+                       { client="0" }, { client="" } },
+               { Value,
+                       "connect_freq",
+                       "3 10",
+                       translate("Allowed maximum of new connections"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "client_cert_not_required",
+                       0,
+                       translate("Don't require client certificate"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "username_as_common_name",
+                       0,
+                       translate("Use username as common name"),
+                       { client="0" }, { client="" } },
+               { Flag,
+                       "client",
+                       0,
+                       translate("Configure client mode") },
+               { Flag,
+                       "pull",
+                       0,
+                       translate("Accept options pushed from server"),
+                       { client="1" } },
+               { Value,
+                       "auth_user_pass",
+                       "/etc/openvpn/userpass.txt",
+                       translate("Authenticate using username/password"),
+                       { client="1" } },
+               { ListValue,
+                       "auth_retry",
+                       { "none", "nointeract", "interact" },
+                       translate("Handling of authentication failures"),
+                       { client="1" } },
+               { Value,
+                       "explicit_exit_notify",
+                       1,
+                       translate("Send notification to peer on disconnect"),
+                       { client="1" } },
+               { DynamicList,
+                       "remote",
+                       "1.2.3.4",
+                       translate("Remote host name or ip address"),
+                       { client="1" } },
+               { Flag,
+                       "remote_random",
+                       0,
+                       translate("Randomly choose remote server"),
+                       { client="1" } },
+               { ListValue,
+                       "proto",
+                       { "udp", "tcp-client", "tcp-server" },
+                       translate("Use protocol"),
+                       { client="1" } },
+               { Value,
+                       "connect_retry",
+                       5,
+                       translate("Connection retry interval"),
+                       { proto="tcp-client" }, { client="1" } },
+               { Value,
+                       "http_proxy",
+                       "192.168.1.100 8080",
+                       translate("Connect to remote host through an HTTP proxy"),
+                       { client="1" } },
+               { Flag,
+                       "http_proxy_retry",
+                       0,
+                       translate("Retry indefinitely on HTTP proxy errors"),
+                       { client="1" } },
+               { Value,
+                       "http_proxy_timeout",
+                       5,
+                       translate("Proxy timeout in seconds"),
+                       { client="1" } },
+               { DynamicList,
+                       "http_proxy_option",
+                       { "VERSION 1.0", "AGENT OpenVPN/2.0.9" },
+                       translate("Set extended HTTP proxy options"),
+                       { client="1" } },
+               { Value,
+                       "socks_proxy",
+                       "192.168.1.200 1080",
+                       translate("Connect through Socks5 proxy"),
+                       { client="1" } },
+       -- client && socks_proxy
+               { Value,
+                       "socks_proxy_retry",
+                       5,
+                       translate("Retry indefinitely on Socks proxy errors"),
+                       { client="1" } },
+               { Value,
+                       "resolv_retry",
+                       "infinite",
+                       translate("If hostname resolve fails, retry"),
+                       { client="1" } },
+               { ListValue,
+                       "redirect_gateway",
+                       { "", "local", "def1", "local def1" },
+                       translate("Automatically redirect default route"),
+                       { client="1" } },
        } },
 
        { "Cryptography", {
-               { FileUpload,   "secret",                                               "/etc/openvpn/secret.key",                                                                      translate("Enable Static Key encryption mode (non-TLS)") },
-               { Value,                "auth",                                                 "SHA1",                                                                                                                 translate("HMAC authentication for packets") }, -- parse
-               { Value,                "cipher",                                               "BF-CBC",                                                                                                               translate("Encryption cipher for packets") }, -- parse
-               { Value,                "keysize",                                              1024,                                                                                                                   translate("Size of cipher key") }, -- parse
-               { Value,                "engine",                                               "dynamic",                                                                                                              translate("Enable OpenSSL hardware crypto engines") }, -- parse
-               { Flag,                 "no_replay",                                    0,                                                                                                                              translate("Disable replay protection") },
-               { Value,                "replay_window",                                "64 15",                                                                                                                translate("Replay protection sliding window size") },
-               { Flag,                 "mute_replay_warnings",                 0,                                                                                                                              translate("Silence the output of replay warnings") },
-               { Value,                "replay_persist",                               "/var/run/openvpn-replay-state",                                                                translate("Persist replay-protection state") },
-               { Flag,                 "no_iv",                                                0,                                                                                                                              translate("Disable cipher initialisation vector") },
-               { Flag,                 "tls_server",                                   0,                                                                                                                              translate("Enable TLS and assume server role"), { tls_client="" }, { tls_client="0" } },
-               { Flag,                 "tls_client",                                   0,                                                                                                                              translate("Enable TLS and assume client role"), { tls_server="" }, { tls_server="0" } },
-               { FileUpload,   "ca",                                                   "/etc/easy-rsa/keys/ca.crt",                                                                    translate("Certificate authority") },
-               { FileUpload,   "dh",                                                   "/etc/easy-rsa/keys/dh1024.pem",                                                                translate("Diffie Hellman parameters") },
-               { FileUpload,   "cert",                                                 "/etc/easy-rsa/keys/some-client.crt",                                                   translate("Local certificate") },
-               { FileUpload,   "key",                                                  "/etc/easy-rsa/keys/some-client.key",                                                   translate("Local private key") },
-               { FileUpload,   "pkcs12",                                               "/etc/easy-rsa/keys/some-client.pk12",                                                  translate("PKCS#12 file containing keys") },
-               { ListValue,    "key_method",                                   { 1, 2 },                                                                                                               translate("Enable TLS and assume client role") },
-               { Value,                "tls_cipher",                                   "DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5",
-                                                                                                                                                                                                                                               translate("TLS cipher") },
-               { Value,                "tls_timeout",                                  2,                                                                                                                              translate("Retransmit timeout on TLS control channel") },
-               { Value,                "reneg_bytes",                                  1024,                                                                                                                   translate("Renegotiate data chan. key after bytes") },
-               { Value,                "reneg_pkts",                                   100,                                                                                                                    translate("Renegotiate data chan. key after packets") },
-               { Value,                "reneg_sec",                                    3600,                                                                                                                   translate("Renegotiate data chan. key after seconds") },
-               { Value,                "hand_window",                                  60,                                                                                                                             translate("Timeframe for key exchange") },
-               { Value,                "tran_window",                                  3600,                                                                                                                   translate("Key transition window") },
-               { Flag,                 "single_session",                               0,                                                                                                                              translate("Allow only one session") },
-               { Flag,                 "tls_exit",                                             0,                                                                                                                              translate("Exit on TLS negotiation failure") },
-               { Value,                "tls_auth",                                             "/etc/openvpn/tlsauth.key",                                                                     translate("Additional authentication over TLS") },
-               --{ Value,              "askpass",                                              "[file]",                                                                                                               translate("Get PEM password from controlling tty before we daemonize") },
-               { Flag,                 "auth_nocache",                                 0,                                                                                                                              translate("Don't cache --askpass or --auth-user-pass passwords") },
-               { Value,                "tls_remote",                                   "remote_x509_name",                                                                                             translate("Only accept connections from given X509 name") },
-               { ListValue,    "ns_cert_type",                                 { "client", "server" },                                                                                 translate("Require explicit designation on certificate") },
-               { ListValue,    "remote_cert_tls",                              { "client", "server" },                                                                                 translate("Require explicit key usage on certificate") },
-               { Value,                "crl_verify",                                   "/etc/easy-rsa/keys/crl.pem",                                                                   translate("Check peer certificate against a CRL") },
-               { Value,        "tls_version_min",              "1.0",                                                                                                                  translate("The lowest supported TLS version") },
-               { Value,        "tls_version_max",              "1.2",                                                                                                                  translate("The highest supported TLS version") },
-               { Value,        "key_direction",                "1",                                                                                                                    translate("The key direction for 'tls-auth' and 'secret' options") },
-       } }
+               { FileUpload,
+                       "secret",
+                       "/etc/openvpn/secret.key",
+                       translate("Enable Static Key encryption mode (non-TLS)") },
+       -- parse
+               { Value,
+                       "auth",
+                       "SHA1",
+                       translate("HMAC authentication for packets") },
+       -- parse
+               { Value,
+                       "cipher",
+                       "BF-CBC",
+                       translate("Encryption cipher for packets") },
+       -- parse
+               { Value,
+                       "keysize",
+                       1024,
+                       translate("Size of cipher key") },
+       -- parse
+               { Value,
+                       "engine",
+                       "dynamic",
+                       translate("Enable OpenSSL hardware crypto engines") },
+               { Flag,
+                       "no_replay",
+                       0,
+                       translate("Disable replay protection") },
+               { Value,
+                       "replay_window",
+                       "64 15",
+                       translate("Replay protection sliding window size") },
+               { Flag,
+                       "mute_replay_warnings",
+                       0,
+                       translate("Silence the output of replay warnings") },
+               { Value,
+                       "replay_persist",
+                       "/var/run/openvpn-replay-state",
+                       translate("Persist replay-protection state") },
+               { Flag,
+                       "no_iv",
+                       0,
+                       translate("Disable cipher initialisation vector") },
+               { Flag,
+                       "tls_server",
+                       0,
+                       translate("Enable TLS and assume server role"),
+                       { tls_client="" }, { tls_client="0" } },
+               { Flag,
+                       "tls_client",
+                       0,
+                       translate("Enable TLS and assume client role"),
+                       { tls_server="" }, { tls_server="0" } },
+               { FileUpload,
+                       "ca",
+                       "/etc/easy-rsa/keys/ca.crt",
+                       translate("Certificate authority") },
+               { FileUpload,
+                       "dh",
+                       "/etc/easy-rsa/keys/dh1024.pem",
+                       translate("Diffie Hellman parameters") },
+               { FileUpload,
+                       "cert",
+                       "/etc/easy-rsa/keys/some-client.crt",
+                       translate("Local certificate") },
+               { FileUpload,
+                       "key",
+                       "/etc/easy-rsa/keys/some-client.key",
+                       translate("Local private key") },
+               { FileUpload,
+                       "pkcs12",
+                       "/etc/easy-rsa/keys/some-client.pk12",
+                       translate("PKCS#12 file containing keys") },
+               { ListValue,
+                       "key_method",
+                       { 1, 2 },
+                       translate("Enable TLS and assume client role") },
+               { Value,
+                       "tls_cipher",
+                       "DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:AES256-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DES-CBC3-SHA:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:AES128-SHA:RC4-SHA:RC4-MD5:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5",
+                       translate("TLS cipher") },
+               { Value,
+                       "tls_timeout",
+                       2,
+                       translate("Retransmit timeout on TLS control channel") },
+               { Value,
+                       "reneg_bytes",
+                       1024,
+                       translate("Renegotiate data chan. key after bytes") },
+               { Value,
+                       "reneg_pkts",
+                       100,
+                       translate("Renegotiate data chan. key after packets") },
+               { Value,
+                       "reneg_sec",
+                       3600,
+                       translate("Renegotiate data chan. key after seconds") },
+               { Value,
+                       "hand_window",
+                       60,
+                       translate("Timeframe for key exchange") },
+               { Value,
+                       "tran_window",
+                       3600,
+                       translate("Key transition window") },
+               { Flag,
+                       "single_session",
+                       0,
+                       translate("Allow only one session") },
+               { Flag,
+                       "tls_exit",
+                       0,
+                       translate("Exit on TLS negotiation failure") },
+               { Value,
+                       "tls_auth",
+                       "/etc/openvpn/tlsauth.key",
+                       translate("Additional authentication over TLS") },
+               { Value,
+                       "tls_crypt",
+                       "/etc/openvpn/tlscrypt.key",
+                       translate("Encrypt and authenticate all control channel packets with the key") },
+       --      { Value,
+       --              "askpass",
+       --              "[file]",
+       --              translate("Get PEM password from controlling tty before we daemonize") },
+               { Flag,
+                       "auth_nocache",
+                       0,
+                       translate("Don't cache --askpass or --auth-user-pass passwords") },
+               { Value,
+                       "tls_remote",
+                       "remote_x509_name",
+                       translate("Only accept connections from given X509 name") },
+               { ListValue,
+                       "ns_cert_type",
+                       { "client", "server" },
+                       translate("Require explicit designation on certificate") },
+               { ListValue,
+                       "remote_cert_tls",
+                       { "client", "server" },
+                       translate("Require explicit key usage on certificate") },
+               { Value,
+                       "crl_verify",
+                       "/etc/easy-rsa/keys/crl.pem",
+                       translate("Check peer certificate against a CRL") },
+               { Value,
+                       "tls_version_min",
+                       "1.0",
+                       translate("The lowest supported TLS version") },
+               { Value,
+                       "tls_version_max",
+                       "1.2",
+                       translate("The highest supported TLS version") },
+               { Value,
+                       "key_direction",
+                       "1",
+                       translate("The key direction for 'tls-auth' and 'secret' options") },
+       } }
 }
 
 
index aaa1979..3f651c0 100644 (file)
@@ -24,7 +24,7 @@ local basicParams = {
        { ListValue,"comp_lzo",{"yes","no","adaptive"}, translate("Use fast LZO compression") },
        { Value,"keepalive","10 60", translate("Helper directive to simplify the expression of --ping and --ping-restart in server mode configurations") },
 
-       { ListValue,"proto",{ "udp", "udp6", "tcp", "tcp6" }, translate("Use protocol") },
+       { ListValue,"proto",{ "udp", "tcp-client", "tcp-server" }, translate("Use protocol") },
 
        { Flag,"client",0, translate("Configure client mode") },
        { Flag,"client_to_client",0, translate("Allow client-to-client traffic") },
index 1b75fe6..d756469 100644 (file)
@@ -199,6 +199,9 @@ msgstr "Activa la interfície de gestió a <em>IP</em> <em>port</em>"
 msgid "Enabled"
 msgstr "Activat"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Xifra d'encriptació per paquets"
 
index c687422..4fba010 100644 (file)
@@ -194,6 +194,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "Povoleno"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index dc382ee..a203c92 100644 (file)
@@ -197,6 +197,9 @@ msgstr "Administratorschnittstelle aktivieren"
 msgid "Enabled"
 msgstr "Einschalten"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Verschlüsselungsalgorithmus für Pakete"
 
index 2c787d8..63dd898 100644 (file)
@@ -198,6 +198,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "Ενεργοποιημένο"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index a5994dc..51819f6 100644 (file)
@@ -197,6 +197,9 @@ msgstr "Enable management interface on <em>IP</em> <em>port</em>"
 msgid "Enabled"
 msgstr "Enabled"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "Encrypt and authenticate all control channel packets with the key"
+
 msgid "Encryption cipher for packets"
 msgstr "Encryption cipher for packets"
 
index a514183..819e7ee 100644 (file)
@@ -196,6 +196,9 @@ msgstr "Interfaz de gestión en <em>IP</em> <em>puerto</em>"
 msgid "Enabled"
 msgstr "Activado"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Cifra de encriptación de paquetes"
 
index e2f33dc..331d193 100644 (file)
@@ -206,6 +206,9 @@ msgstr "Activer l'interface de gestion sur <em>IP</em> <em>port</em>"
 msgid "Enabled"
 msgstr "Activé"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Méthode de chiffrement des paquets"
 
index 3528444..517da49 100644 (file)
@@ -192,6 +192,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 1f9d691..67a8217 100644 (file)
@@ -196,6 +196,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "Engedélyezve"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 233c144..834015b 100644 (file)
@@ -198,6 +198,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "Abilitato"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 5474008..232ae27 100644 (file)
@@ -196,6 +196,9 @@ msgstr ""
 msgid "Enabled"
 msgstr "有効"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index c439c3e..6c6e0d6 100644 (file)
@@ -191,6 +191,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 3528444..517da49 100644 (file)
@@ -192,6 +192,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index e289a80..bef5a13 100644 (file)
@@ -197,6 +197,9 @@ msgstr "Włącz interfejs zarządzalny na <em>IP</em> <em>port</em>"
 msgid "Enabled"
 msgstr "Włączone"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Szyfrowanie dla pakietów"
 
index 916370e..26642e2 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2014-03-29 23:19+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-20 18:04-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
 
 msgid "%s"
 msgstr "%s"
@@ -154,7 +154,7 @@ msgid "Don't log timestamps"
 msgstr "Não registar a data/hora"
 
 msgid "Don't pull routes automatically"
-msgstr ""
+msgstr "Não puxe as rotas automaticamente"
 
 msgid "Don't re-read key on restart"
 msgstr "Não reler a chave entre os reinícios"
@@ -198,6 +198,9 @@ msgstr "Ativar o interface de gestão em <em>IP</em> <em>porta</em>"
 msgid "Enabled"
 msgstr "Ativado"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Cifra de encriptação para pacotes"
 
@@ -505,13 +508,13 @@ msgid "Temporary directory for client-connect return file"
 msgstr "Diretório temporário para arquivo de retorno de conexão-cliente"
 
 msgid "The highest supported TLS version"
-msgstr ""
+msgstr "A mais alta versão suporta do TLS"
 
 msgid "The key direction for 'tls-auth' and 'secret' options"
-msgstr ""
+msgstr "A direção da chave para as opções 'tls-auth' e 'secret'"
 
 msgid "The lowest supported TLS version"
-msgstr ""
+msgstr "A mais baixa versão suporta do TLS"
 
 msgid "Timeframe for key exchange"
 msgstr "Janela temporal para troca de chaves"
index 95c50a5..d74b0a6 100644 (file)
@@ -198,6 +198,9 @@ msgstr "Activar o interface de gestão em <em>IP</em> <em>porta</em>"
 msgid "Enabled"
 msgstr "Activado"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Cifra de encriptação para pacotes"
 
index 4a7a5b7..ef5e7ce 100644 (file)
@@ -193,6 +193,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 00e585c..89cf116 100644 (file)
@@ -200,6 +200,9 @@ msgstr "Включить интерфейс управления на <em>IP</em
 msgid "Enabled"
 msgstr "Включено"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "Шифровать и аутентифициоровать ключом все пакеты канала управления"
+
 msgid "Encryption cipher for packets"
 msgstr "Шифрование для пакетов"
 
index f001c12..9005529 100644 (file)
@@ -191,6 +191,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 6b8f92f..838f465 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -10,25 +10,25 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
 msgid "%s"
-msgstr ""
+msgstr "%s"
 
 msgid "'net30', 'p2p', or 'subnet'"
-msgstr ""
+msgstr "'net30', 'p2p', eller 'subnät'"
 
 msgid "Accept options pushed from server"
 msgstr ""
 
 msgid "Add"
-msgstr ""
+msgstr "Lägg till"
 
 msgid "Add route after establishing connection"
 msgstr ""
 
 msgid "Additional authentication over TLS"
-msgstr ""
+msgstr "Ytterligare autentisering via TLS"
 
 msgid "Allow client-to-client traffic"
-msgstr ""
+msgstr "Tillåt klient-till-klienttraffik"
 
 msgid "Allow multiple clients with same certificate"
 msgstr ""
@@ -192,6 +192,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index f2e4011..126cab0 100644 (file)
@@ -184,6 +184,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 7b8ffad..917c36d 100644 (file)
@@ -191,6 +191,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index a6910c2..e98b52a 100644 (file)
@@ -195,6 +195,9 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr ""
 
index 8e8b96d..f3873b0 100644 (file)
@@ -197,6 +197,9 @@ msgstr "Kích hoạt giao diện điều hành trên <em>IP</em> <em>cổng</em>
 msgid "Enabled"
 msgstr "Kích hoạt "
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr ""
+
 msgid "Encryption cipher for packets"
 msgstr "Encryption cipher cho các gói"
 
index 899b4d2..13182fc 100644 (file)
@@ -1,23 +1,26 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-05-19 19:35+0200\n"
-"PO-Revision-Date: 2013-10-10 06:09+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
+"PO-Revision-Date: 2017-10-29 14:37+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "%s"
 msgstr "%s"
 
 msgid "'net30', 'p2p', or 'subnet'"
-msgstr "'net30', 'p2p', 或 '子网'"
+msgstr "“net30”,“p2p”,或“subnet”"
 
 msgid "Accept options pushed from server"
 msgstr "接受从服务器发送过来的选项"
@@ -29,7 +32,7 @@ msgid "Add route after establishing connection"
 msgstr "建立连接后添加路由"
 
 msgid "Additional authentication over TLS"
-msgstr "TLS以外的验证"
+msgstr "TLS 以外的验证"
 
 msgid "Allow client-to-client traffic"
 msgstr "允许客户端到客户端的通信"
@@ -41,7 +44,7 @@ msgid "Allow only one session"
 msgstr "只允许一个会话"
 
 msgid "Allow remote to change its IP or port"
-msgstr "å\85\81许è¿\9cç¨\8bä¿®æ\94¹ipå\92\8c端口"
+msgstr "å\85\81许è¿\9c端æ\94¹å\8f\98 IP æ\88\96端口"
 
 msgid "Allowed maximum of connected clients"
 msgstr "允许最大已连接客户端数"
@@ -62,10 +65,10 @@ msgid "Automatically redirect default route"
 msgstr "自动重定向至默认路由"
 
 msgid "Below is a list of configured OpenVPN instances and their current state"
-msgstr "Openvpn已配置实例及其当前状态列表"
+msgstr "以下是 OpenVPN 已配置实例及其当前状态的列表"
 
 msgid "Call down cmd/script before TUN/TAP close"
-msgstr "TUN/TAP关闭前关闭命令行及脚本"
+msgstr "TUN/TAP 关闭前的命令行及脚本"
 
 msgid "Certificate authority"
 msgstr "认证授权"
@@ -98,10 +101,10 @@ msgid "Configure server mode"
 msgstr "配置服务器模式"
 
 msgid "Connect through Socks5 proxy"
-msgstr "通过Sock5代理连接"
+msgstr "通过 Sock5 代理连接"
 
 msgid "Connect to remote host through an HTTP proxy"
-msgstr "通过HTTP代理连接到远程主机"
+msgstr "通过 HTTP 代理连接到远程主机"
 
 msgid "Connection retry interval"
 msgstr "连接重试时间间隔"
@@ -110,13 +113,13 @@ msgid "Daemonize after initialization"
 msgstr "初始化后进入后台运行"
 
 msgid "Delay n seconds after connection"
-msgstr "连接后延迟时间(秒)"
+msgstr "连接后延迟时间(秒"
 
 msgid "Delay tun/tap open and up script execution"
-msgstr "延迟tun/tap的打开并加速脚本执行"
+msgstr "延迟 tun/tap 的打开及 up 脚本的执行"
 
 msgid "Diffie Hellman parameters"
-msgstr "Diffie–Hellman/DH密钥交换 参数"
+msgstr "Diffie–Hellman/DH 密钥交换参数"
 
 msgid "Directory for custom client config files"
 msgstr "自定义客户端配置文件的目录"
@@ -137,13 +140,13 @@ msgid "Do not bind to local address and port"
 msgstr "不绑定本地地址和端口"
 
 msgid "Don't actually execute ifconfig"
-msgstr "不实际执行ifconfig命令"
+msgstr "不实际执行 ifconfig 命令"
 
 msgid "Don't add routes automatically"
 msgstr "不自动添加路由"
 
 msgid "Don't cache --askpass or --auth-user-pass passwords"
-msgstr "不缓存--askpass 或--auth-user-pass passwords"
+msgstr "不缓存 --askpass 或 --auth-user-pass passwords"
 
 msgid "Don't inherit global push options"
 msgstr "不继承全局主动发送选项"
@@ -152,7 +155,7 @@ msgid "Don't log timestamps"
 msgstr "不记录时间戳"
 
 msgid "Don't pull routes automatically"
-msgstr ""
+msgstr "不自动拉取路由"
 
 msgid "Don't re-read key on restart"
 msgstr "服务重启时不重读密钥值"
@@ -161,49 +164,52 @@ msgid "Don't require client certificate"
 msgstr "不需要客户的证书"
 
 msgid "Don't use adaptive lzo compression"
-msgstr "不用自适应的lzo压缩"
+msgstr "不用自适应 lzo 压缩"
 
 msgid "Don't warn on ifconfig inconsistencies"
-msgstr "ifconfig不一致时不警告"
+msgstr "ifconfig 不一致时不警告"
 
 msgid "Echo parameters to log"
 msgstr "把参数写入日志"
 
 msgid "Empirically measure MTU"
-msgstr "以历史值估算MTU值"
+msgstr "以历史值估算 MTU 值"
 
 msgid "Enable OpenSSL hardware crypto engines"
-msgstr "打开OpenSSL硬件加密引擎"
+msgstr "打开 OpenSSL 硬件加密引擎"
 
 msgid "Enable Path MTU discovery"
-msgstr "启用路径MTU发现"
+msgstr "启用路径 MTU 发现"
 
 msgid "Enable Static Key encryption mode (non-TLS)"
 msgstr "允许静态密钥加密模式"
 
 msgid "Enable TLS and assume client role"
-msgstr "允许TLS并伪装为客户端"
+msgstr "允许 TLS 并伪装为客户端"
 
 msgid "Enable TLS and assume server role"
-msgstr "允许TLS并伪装为服务器"
+msgstr "允许 TLS 并伪装为服务器"
 
 msgid "Enable internal datagram fragmentation"
 msgstr "允许内部数据报分片"
 
 msgid "Enable management interface on <em>IP</em> <em>port</em>"
-msgstr "在<em>IP</em> <em>port</em>上启用可管理接口"
+msgstr "在 <em>IP</em> <em>port</em> 上启用可管理接口"
 
 msgid "Enabled"
 msgstr "启用"
 
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "使用密钥加密及认证所有的控制通道数据包"
+
 msgid "Encryption cipher for packets"
 msgstr "加密数据包"
 
 msgid "Execute shell cmd after routes are added"
-msgstr "添加路由后执行shell命令"
+msgstr "添加路由后执行 shell 命令"
 
 msgid "Execute shell command on remote ip change"
-msgstr "当远程ip改变时执行shell命令"
+msgstr "当远程 ip 改变时执行 shell 命令"
 
 msgid ""
 "Executed in server mode on new client connections, when the client is still "
@@ -214,16 +220,16 @@ msgid ""
 "Executed in server mode whenever an IPv4 address/route or MAC address is "
 "added to OpenVPN's internal routing table"
 msgstr ""
-"服务器模式下,将每个IPv4地址/路由或MAC地址添加到OpenVPN的内部路由表中。"
+"服务器模式下,将每个 IPv4 地址/路由或 MAC 地址添加到 OpenVPN 的内部路由表中。"
 
 msgid "Exit on TLS negotiation failure"
-msgstr "TLS验证失败后退出"
+msgstr "TLS 验证失败后退出"
 
 msgid "Get PEM password from controlling tty before we daemonize"
-msgstr "后台运行前从控制的tty中获取PEM密码"
+msgstr "后台运行前从控制的 tty 中获取 PEM 密码"
 
 msgid "HMAC authentication for packets"
-msgstr "利用HMAC水印算法校验数据包"
+msgstr "利用 HMAC 算法校验数据包"
 
 msgid "Handling of authentication failures"
 msgstr "处理验证失败"
@@ -231,7 +237,7 @@ msgstr "处理验证失败"
 msgid ""
 "Helper directive to simplify the expression of --ping and --ping-restart in "
 "server mode configurations"
-msgstr "在服务配置模式下Helper简明的执行--ping和--ping-restart"
+msgstr "在服务配置模式下简化 Helper 指令 --ping 和 --ping-restart 的表达式"
 
 msgid "If hostname resolve fails, retry"
 msgstr "如果主机名解析错误,重试"
@@ -243,10 +249,10 @@ msgid "Invalid"
 msgstr "无效"
 
 msgid "Keep local IP address on restart"
-msgstr "服务重启时保持本地IP地址"
+msgstr "服务重启时保持本地 IP 地址"
 
 msgid "Keep remote IP address on restart"
-msgstr "服务重启时保持远程IP地址"
+msgstr "服务重启时保持远程 IP 地址"
 
 msgid "Keep tun/tap device open on restart"
 msgstr "服务重启时自动打开 tun/tap 设备"
@@ -255,22 +261,22 @@ msgid "Key transition window"
 msgstr "密钥传输滑动窗口"
 
 msgid "Limit repeated log messages"
-msgstr "限制重复的日志消息"
+msgstr "限制重复的日志消息"
 
 msgid "Local certificate"
 msgstr "本地证书"
 
 msgid "Local host name or ip address"
-msgstr "本地主机名或ip地址"
+msgstr "本地主机名或 ip 地址"
 
 msgid "Local private key"
-msgstr "本地私人密钥"
+msgstr "本地私钥"
 
 msgid "Major mode"
 msgstr "主要模式"
 
 msgid "Make tun device IPv6 capable"
-msgstr "使 tun 设备兼容IPv6"
+msgstr "使 tun 设备兼容 IPv6"
 
 msgid "Maximum number of queued TCP output packets"
 msgstr "TCP队列中输出包的最大数量"
@@ -282,10 +288,10 @@ msgid "Number of lines for log file history"
 msgstr "历史日志文件的行数"
 
 msgid "Only accept connections from given X509 name"
-msgstr "只接收已给定的X509名称的连接"
+msgstr "只接收已给定的 X509 名称的连接"
 
 msgid "Only process ping timeouts if routes exist"
-msgstr "当且仅当路由存在时处理ping超时"
+msgstr "仅当路由存在时处理 ping 超时"
 
 msgid "OpenVPN"
 msgstr "OpenVPN"
@@ -297,13 +303,13 @@ msgid "Optimize TUN/TAP/UDP writes"
 msgstr "优化 TUN/TAP/UDP 写入"
 
 msgid "Output to syslog and do not daemonize"
-msgstr "显式输出到syslog"
+msgstr "输出到 syslog,不运行守护进程"
 
 msgid "Overview"
 msgstr "概览"
 
 msgid "PKCS#12 file containing keys"
-msgstr "PKCS#12文件包含的密钥"
+msgstr "PKCS#12 文件包含的密钥"
 
 msgid "Pass environment variables to script"
 msgstr "传递环境变量至脚本"
@@ -312,10 +318,10 @@ msgid "Persist replay-protection state"
 msgstr "保存重播保护的状态"
 
 msgid "Persist/unpersist ifconfig-pool"
-msgstr "持久/非持久ifconfig池"
+msgstr "持久/非持久 ifconfig 池"
 
 msgid "Ping remote every n seconds over TCP/UDP port"
-msgstr "每n秒ping一次远程 TCP/UDP 端口"
+msgstr "每 n 秒 ping 一次远程 TCP/UDP 端口"
 
 msgid "Policy level over usage of external programs and scripts"
 msgstr "外部程序和脚本超出了策略允许的使用范围"
@@ -330,13 +336,13 @@ msgid "Proxy timeout in seconds"
 msgstr "代理超时,单位秒"
 
 msgid "Push an ifconfig option to remote"
-msgstr "主动向远程发送ifconfig选项"
+msgstr "主动向远程发送 ifconfig 选项"
 
 msgid "Push options to peer"
 msgstr "主动向端点发送选项"
 
 msgid "Query management channel for private key"
-msgstr "为私人密钥查询管理通道"
+msgstr "为私钥查询管理通道"
 
 msgid "Randomly choose remote server"
 msgstr "随机选择远程服务器"
@@ -345,13 +351,13 @@ msgid "Refuse connection if no custom client config"
 msgstr "拒接没有自定义客户端配置的连接"
 
 msgid "Remap SIGUSR1 signals"
-msgstr "重映射SIGUSR1信号"
+msgstr "重映射 SIGUSR1 信号"
 
 msgid "Remote host name or ip address"
-msgstr "远程主机名或ip地址"
+msgstr "远程主机名或 ip 地址"
 
 msgid "Remote ping timeout"
-msgstr "远程ping超时"
+msgstr "远程 ping 超时"
 
 msgid "Renegotiate data chan. key after bytes"
 msgstr "传输若干字节后重新验证数据通道密钥"
@@ -372,22 +378,22 @@ msgid "Require explicit key usage on certificate"
 msgstr "证书需要明确的密钥"
 
 msgid "Restart after remote ping timeout"
-msgstr "远程ping超时后重启"
+msgstr "远程 ping 超时后重启"
 
 msgid "Retransmit timeout on TLS control channel"
-msgstr "TLS控制通道超时后重新发送"
+msgstr "TLS 控制通道超时后重新发送"
 
 msgid "Retry indefinitely on HTTP proxy errors"
 msgstr "无限重试直至代理正确"
 
 msgid "Retry indefinitely on Socks proxy errors"
-msgstr "无限重试直至Socks代理正确"
+msgstr "无限重试直至 Socks 代理正确"
 
 msgid "Route subnet to client"
 msgstr "路由子网至客户端"
 
 msgid "Run as an inetd or xinetd server"
-msgstr "以inetd或xinetd服务器的方式运行"
+msgstr "以 inetd 或 xinetd 服务器的方式运行"
 
 msgid "Run script cmd on client connection"
 msgstr "当客户端连接时在命令行下允许脚本"
@@ -402,19 +408,19 @@ msgid "Send notification to peer on disconnect"
 msgstr "断开连接时向客户端发送通知"
 
 msgid "Set GID to group"
-msgstr "为群组设置GID值"
+msgstr "为群组设置 GID 值"
 
 msgid "Set TCP/UDP MTU"
-msgstr "设置TCP/UDP的MTU值"
+msgstr "设置 TCP/UDP 的 MTU 值"
 
 msgid "Set UID to user"
-msgstr "为用户设置UID值"
+msgstr "为用户设置 UID 值"
 
 msgid "Set aside a pool of subnets"
-msgstr "设置为拒绝子网线程池模式"
+msgstr "设置子网池"
 
 msgid "Set extended HTTP proxy options"
-msgstr "设置HTTP扩展代理选项"
+msgstr "设置 HTTP 扩展代理选项"
 
 msgid "Set output verbosity"
 msgstr "设置输出冗余级别"
@@ -423,37 +429,37 @@ msgid "Set size of real and virtual address hash tables"
 msgstr "设置实际和虚拟地址的哈希表大小"
 
 msgid "Set the TCP/UDP receive buffer size"
-msgstr "设置TCP/UDP接收缓冲区大小"
+msgstr "设置 TCP/UDP 接收缓冲区大小"
 
 msgid "Set the TCP/UDP send buffer size"
-msgstr "设置TCP/UDP发送缓冲区大小"
+msgstr "设置 TCP/UDP 发送缓冲区大小"
 
 msgid "Set tun/tap TX queue length"
-msgstr "设置tun/tap发送队列长度"
+msgstr "设置 tun/tap 发送队列长度"
 
 msgid "Set tun/tap adapter parameters"
-msgstr "设置tun/ tap适配器参数"
+msgstr "设置 tun/tap 适配器参数"
 
 msgid "Set tun/tap device MTU"
-msgstr "设置tun/tap设备的MTU值"
+msgstr "设置 tun/tap 设备的 MTU 值"
 
 msgid "Set tun/tap device overhead"
-msgstr "设置tun/tap设备的开销"
+msgstr "设置 tun/tap 设备的开销"
 
 msgid "Set upper bound on TCP MSS"
-msgstr "设置TCP MSS的上限"
+msgstr "设置 TCP MSS 上限"
 
 msgid "Shaping for peer bandwidth"
 msgstr "改变结点带宽"
 
 msgid "Shell cmd to execute after tun device open"
-msgstr "tun设备打开后运行shell命令行"
+msgstr "tun 设备打开后运行的 shell 命令"
 
 msgid "Shell cmd to run after tun device close"
-msgstr "tun设备关闭后运行shell命令行e"
+msgstr "tun 设备关闭后运行的 shell 命令"
 
 msgid "Shell command to verify X509 name"
-msgstr "运行shell命令以验证X509名称"
+msgstr "运行 shell 命令以验证 X509 名称"
 
 msgid "Silence the output of replay warnings"
 msgstr "以静音的方式发出重播警告"
@@ -465,7 +471,7 @@ msgid "Specify a default gateway for routes"
 msgstr "指定路由默认网关"
 
 msgid "Start OpenVPN in a hibernating state"
-msgstr "以休眠的状态打开OpenVPN"
+msgstr "以休眠的状态打开 OpenVPN"
 
 msgid "Start/Stop"
 msgstr "启动/停止"
@@ -483,28 +489,28 @@ msgid "TCP/UDP port # for both local and remote"
 msgstr "TCP/UDP 端口 # 同时针对本地和远程"
 
 msgid "TCP/UDP port # for local (default=1194)"
-msgstr "TCP/UDP 端口 # 本地 (默认 1194)"
+msgstr "TCP/UDP 端口 # 本地(默认 1194)"
 
 msgid "TCP/UDP port # for remote (default=1194)"
-msgstr "TCP/UDP 端口 # 远程 (默认 1194)"
+msgstr "TCP/UDP 端口 # 远程(默认 1194)"
 
 msgid "TLS cipher"
-msgstr "TLS加密"
+msgstr "TLS 加密"
 
 msgid "TOS passthrough (applies to IPv4 only)"
-msgstr "TOS 穿透 (仅限IPv4)"
+msgstr "TOS 穿透(仅限 IPv4)"
 
 msgid "Temporary directory for client-connect return file"
 msgstr "客户端连接返回文件的临时目录"
 
 msgid "The highest supported TLS version"
-msgstr ""
+msgstr "最高支持的 TLS 版本"
 
 msgid "The key direction for 'tls-auth' and 'secret' options"
-msgstr ""
+msgstr "“tls-auth”和“secret”选项的密钥类型"
 
 msgid "The lowest supported TLS version"
-msgstr ""
+msgstr "最低支持的 TLS 版本"
 
 msgid "Timeframe for key exchange"
 msgstr "密钥交换时间表"
@@ -513,10 +519,10 @@ msgid "Type of used device"
 msgstr "使用设备类型"
 
 msgid "Use fast LZO compression"
-msgstr "使用快速LZO压缩"
+msgstr "使用快速 LZO 压缩"
 
 msgid "Use individual addresses rather than /30 subnets"
-msgstr "利用个人地址代替/30 子网"
+msgstr "使用独立的地址代替 /30 子网"
 
 msgid "Use protocol"
 msgstr "采用协议"
@@ -531,10 +537,10 @@ msgid "Write log to file"
 msgstr "保存日志至文件"
 
 msgid "Write process ID to file"
-msgstr "记录进程ID至文件"
+msgstr "记录进程 ID 至文件"
 
 msgid "Write status to file every n seconds"
-msgstr "每n秒后写状态值至文件"
+msgstr "每 n 秒后写入状态至文件"
 
 msgid "no"
 msgstr "否"
@@ -546,7 +552,7 @@ msgid "tun/tap inactivity timeout"
 msgstr "tun/tap 休眠超时"
 
 msgid "yes (%i)"
-msgstr "是 (%i)"
+msgstr "是(%i)"
 
 msgid "« Switch to basic configuration"
 msgstr "« 基本配置"
index f26aeb0..38bb6fc 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 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"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-05-19 19:35+0200\n"
+"PO-Revision-Date: 2017-10-29 14:37+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Language: zh_TW\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: Gtranslator 2.91.7\n"
 
 msgid "%s"
-msgstr ""
+msgstr "%s"
 
 msgid "'net30', 'p2p', or 'subnet'"
-msgstr ""
+msgstr "“net30”,“p2p”,或“subnet”"
 
 msgid "Accept options pushed from server"
-msgstr ""
+msgstr "接受從伺服器傳送過來的選項"
 
 msgid "Add"
-msgstr ""
+msgstr "新增"
 
 msgid "Add route after establishing connection"
-msgstr ""
+msgstr "建立連線後新增路由"
 
 msgid "Additional authentication over TLS"
-msgstr ""
+msgstr "TLS 以外的驗證"
 
 msgid "Allow client-to-client traffic"
-msgstr ""
+msgstr "允許客戶端到客戶端的通訊"
 
 msgid "Allow multiple clients with same certificate"
-msgstr ""
+msgstr "允許多使用者共用同一證書"
 
 msgid "Allow only one session"
-msgstr ""
+msgstr "只允許一個會話"
 
 msgid "Allow remote to change its IP or port"
-msgstr ""
+msgstr "允許遠端改變 IP 或埠"
 
 msgid "Allowed maximum of connected clients"
-msgstr ""
+msgstr "允許最大已連線客戶端數"
 
 msgid "Allowed maximum of internal"
-msgstr ""
+msgstr "允許最大內部連線"
 
 msgid "Allowed maximum of new connections"
-msgstr ""
+msgstr "允許最大新建連線數"
 
 msgid "Append log to file"
-msgstr ""
+msgstr "新增日誌至檔案"
 
 msgid "Authenticate using username/password"
-msgstr ""
+msgstr "以使用者名稱/密碼的方式進行驗證"
 
 msgid "Automatically redirect default route"
-msgstr ""
+msgstr "自動重定向至預設路由"
 
 msgid "Below is a list of configured OpenVPN instances and their current state"
-msgstr ""
+msgstr "以下是 OpenVPN 已配置例項及其當前狀態的列表"
 
 msgid "Call down cmd/script before TUN/TAP close"
-msgstr ""
+msgstr "TUN/TAP 關閉前的命令列及指令碼"
 
 msgid "Certificate authority"
-msgstr ""
+msgstr "認證授權"
 
 msgid "Change process priority"
-msgstr ""
+msgstr "改變程序優先順序"
 
 msgid "Change to directory before initialization"
-msgstr ""
+msgstr "初始化前改變根目錄"
 
 msgid "Check peer certificate against a CRL"
-msgstr ""
+msgstr "驗證客戶端證書以確保其是否過期"
 
 msgid "Chroot to directory after initialization"
-msgstr ""
+msgstr "初始化後改變根目錄"
 
 msgid "Client is disabled"
-msgstr ""
+msgstr "客戶端已被禁止"
 
 msgid "Configuration category"
-msgstr ""
+msgstr "配置分類"
 
 msgid "Configure client mode"
-msgstr ""
+msgstr "配置客戶端模式"
 
 msgid "Configure server bridge"
-msgstr ""
+msgstr "配置伺服器橋接"
 
 msgid "Configure server mode"
-msgstr ""
+msgstr "配置伺服器模式"
 
 msgid "Connect through Socks5 proxy"
-msgstr ""
+msgstr "通過 Sock5 代理連線"
 
 msgid "Connect to remote host through an HTTP proxy"
-msgstr ""
+msgstr "通過 HTTP 代理連線到遠端主機"
 
 msgid "Connection retry interval"
-msgstr ""
+msgstr "連線重試時間間隔"
 
 msgid "Daemonize after initialization"
-msgstr ""
+msgstr "初始化後進入後臺執行"
 
 msgid "Delay n seconds after connection"
-msgstr ""
+msgstr "連線後延遲時間(秒)"
 
 msgid "Delay tun/tap open and up script execution"
-msgstr ""
+msgstr "延遲 tun/tap 的開啟及 up 指令碼的執行"
 
 msgid "Diffie Hellman parameters"
-msgstr ""
+msgstr "Diffie–Hellman/DH 金鑰交換引數"
 
 msgid "Directory for custom client config files"
-msgstr ""
+msgstr "自定義客戶端配置檔案的目錄"
 
 msgid "Disable Paging"
-msgstr ""
+msgstr "禁止分頁"
 
 msgid "Disable cipher initialisation vector"
-msgstr ""
+msgstr "關閉加密的初始化向量"
 
 msgid "Disable options consistency check"
-msgstr ""
+msgstr "禁止選項一致性檢查"
 
 msgid "Disable replay protection"
-msgstr ""
+msgstr "關閉重播保護"
 
 msgid "Do not bind to local address and port"
-msgstr ""
+msgstr "不繫結本地位址和埠"
 
 msgid "Don't actually execute ifconfig"
-msgstr ""
+msgstr "不實際執行 ifconfig 命令"
 
 msgid "Don't add routes automatically"
-msgstr ""
+msgstr "不自動新增路由"
 
 msgid "Don't cache --askpass or --auth-user-pass passwords"
-msgstr ""
+msgstr "不快取 --askpass 或 --auth-user-pass passwords"
 
 msgid "Don't inherit global push options"
-msgstr ""
+msgstr "不繼承全域性主動傳送選項"
 
 msgid "Don't log timestamps"
-msgstr ""
+msgstr "不記錄時間戳"
 
 msgid "Don't pull routes automatically"
-msgstr ""
+msgstr "不自動拉取路由"
 
 msgid "Don't re-read key on restart"
-msgstr ""
+msgstr "服務重啟時不重讀金鑰值"
 
 msgid "Don't require client certificate"
-msgstr ""
+msgstr "不需要客戶的證書"
 
 msgid "Don't use adaptive lzo compression"
-msgstr ""
+msgstr "不用自適應 lzo 壓縮"
 
 msgid "Don't warn on ifconfig inconsistencies"
-msgstr ""
+msgstr "ifconfig 不一致時不警告"
 
 msgid "Echo parameters to log"
-msgstr ""
+msgstr "把引數寫入日誌"
 
 msgid "Empirically measure MTU"
-msgstr ""
+msgstr "以歷史值估算 MTU 值"
 
 msgid "Enable OpenSSL hardware crypto engines"
-msgstr ""
+msgstr "開啟 OpenSSL 硬體加密引擎"
 
 msgid "Enable Path MTU discovery"
-msgstr ""
+msgstr "啟用路徑 MTU 發現"
 
 msgid "Enable Static Key encryption mode (non-TLS)"
-msgstr ""
+msgstr "允許靜態金鑰加密模式"
 
 msgid "Enable TLS and assume client role"
-msgstr ""
+msgstr "允許 TLS 並偽裝為客戶端"
 
 msgid "Enable TLS and assume server role"
-msgstr ""
+msgstr "允許 TLS 並偽裝為伺服器"
 
 msgid "Enable internal datagram fragmentation"
-msgstr ""
+msgstr "允許內部資料報分片"
 
 msgid "Enable management interface on <em>IP</em> <em>port</em>"
-msgstr ""
+msgstr "在 <em>IP</em> <em>port</em> 上啟用可管理介面"
 
 msgid "Enabled"
-msgstr ""
+msgstr "啟用"
+
+msgid "Encrypt and authenticate all control channel packets with the key"
+msgstr "使用金鑰加密及認證所有的控制通道資料包"
 
 msgid "Encryption cipher for packets"
-msgstr ""
+msgstr "加密資料包"
 
 msgid "Execute shell cmd after routes are added"
-msgstr ""
+msgstr "新增路由後執行 shell 命令"
 
 msgid "Execute shell command on remote ip change"
-msgstr ""
+msgstr "當遠端 ip 改變時執行 shell 命令"
 
 msgid ""
 "Executed in server mode on new client connections, when the client is still "
 "untrusted"
-msgstr ""
+msgstr "在伺服器模式下執行新的客戶端連線,當客戶端仍然是不可信"
 
 msgid ""
 "Executed in server mode whenever an IPv4 address/route or MAC address is "
 "added to OpenVPN's internal routing table"
 msgstr ""
+"伺服器模式下,將每個 IPv4 位址/路由或 MAC 位址新增到 OpenVPN 的內部路由表中。"
 
 msgid "Exit on TLS negotiation failure"
-msgstr ""
+msgstr "TLS 驗證失敗後退出"
 
 msgid "Get PEM password from controlling tty before we daemonize"
-msgstr ""
+msgstr "後臺執行前從控制的 tty 中獲取 PEM 密碼"
 
 msgid "HMAC authentication for packets"
-msgstr ""
+msgstr "利用 HMAC 演算法校驗資料包"
 
 msgid "Handling of authentication failures"
-msgstr ""
+msgstr "處理驗證失敗"
 
 msgid ""
 "Helper directive to simplify the expression of --ping and --ping-restart in "
 "server mode configurations"
-msgstr ""
+msgstr "在服務配置模式下簡化 Helper 指令 --ping 和 --ping-restart 的表示式"
 
 msgid "If hostname resolve fails, retry"
-msgstr ""
+msgstr "如果主機名解析錯誤,重試"
 
 msgid "Instance \"%s\""
-msgstr ""
+msgstr "例項 \"%s\""
 
 msgid "Invalid"
-msgstr ""
+msgstr "無效"
 
 msgid "Keep local IP address on restart"
-msgstr ""
+msgstr "服務重啟時保持本地 IP 位址"
 
 msgid "Keep remote IP address on restart"
-msgstr ""
+msgstr "服務重啟時保持遠端 IP 位址"
 
 msgid "Keep tun/tap device open on restart"
-msgstr ""
+msgstr "服務重啟時自動開啟 tun/tap 裝置"
 
 msgid "Key transition window"
-msgstr ""
+msgstr "金鑰傳輸滑動視窗"
 
 msgid "Limit repeated log messages"
-msgstr ""
+msgstr "限制重複的日誌訊息"
 
 msgid "Local certificate"
-msgstr ""
+msgstr "本地證書"
 
 msgid "Local host name or ip address"
-msgstr ""
+msgstr "本地主機名或 ip 位址"
 
 msgid "Local private key"
-msgstr ""
+msgstr "本地私鑰"
 
 msgid "Major mode"
-msgstr ""
+msgstr "主要模式"
 
 msgid "Make tun device IPv6 capable"
-msgstr ""
+msgstr "使 tun 裝置相容 IPv6"
 
 msgid "Maximum number of queued TCP output packets"
-msgstr ""
+msgstr "TCP佇列中輸出包的最大數量"
 
 msgid "Number of allocated broadcast buffers"
-msgstr ""
+msgstr "已分配的廣播緩衝區數量"
 
 msgid "Number of lines for log file history"
-msgstr ""
+msgstr "歷史日誌檔案的行數"
 
 msgid "Only accept connections from given X509 name"
-msgstr ""
+msgstr "只接收已給定的 X509 名稱的連線"
 
 msgid "Only process ping timeouts if routes exist"
-msgstr ""
+msgstr "僅當路由存在時處理 ping 超時"
 
 msgid "OpenVPN"
-msgstr ""
+msgstr "OpenVPN"
 
 msgid "OpenVPN instances"
-msgstr ""
+msgstr "OpenVPN 例項"
 
 msgid "Optimize TUN/TAP/UDP writes"
-msgstr ""
+msgstr "優化 TUN/TAP/UDP 寫入"
 
 msgid "Output to syslog and do not daemonize"
-msgstr ""
+msgstr "輸出到 syslog,不執行守護程序"
 
 msgid "Overview"
-msgstr ""
+msgstr "概覽"
 
 msgid "PKCS#12 file containing keys"
-msgstr ""
+msgstr "PKCS#12 檔案包含的金鑰"
 
 msgid "Pass environment variables to script"
-msgstr ""
+msgstr "傳遞環境變數至指令碼"
 
 msgid "Persist replay-protection state"
-msgstr ""
+msgstr "儲存重播保護的狀態"
 
 msgid "Persist/unpersist ifconfig-pool"
-msgstr ""
+msgstr "持久/非持久 ifconfig 池"
 
 msgid "Ping remote every n seconds over TCP/UDP port"
-msgstr ""
+msgstr "每 n 秒 ping 一次遠端 TCP/UDP 埠"
 
 msgid "Policy level over usage of external programs and scripts"
-msgstr ""
+msgstr "外部程式和指令碼超出了策略允許的使用範圍"
 
 msgid "Port"
-msgstr ""
+msgstr ""
 
 msgid "Protocol"
-msgstr ""
+msgstr "協議"
 
 msgid "Proxy timeout in seconds"
-msgstr ""
+msgstr "代理超時,單位秒"
 
 msgid "Push an ifconfig option to remote"
-msgstr ""
+msgstr "主動向遠端傳送 ifconfig 選項"
 
 msgid "Push options to peer"
-msgstr ""
+msgstr "主動向端點發送選項"
 
 msgid "Query management channel for private key"
-msgstr ""
+msgstr "為私鑰查詢管理通道"
 
 msgid "Randomly choose remote server"
-msgstr ""
+msgstr "隨機選擇遠端伺服器"
 
 msgid "Refuse connection if no custom client config"
-msgstr ""
+msgstr "拒接沒有自定義客戶端配置的連線"
 
 msgid "Remap SIGUSR1 signals"
-msgstr ""
+msgstr "重對映 SIGUSR1 訊號"
 
 msgid "Remote host name or ip address"
-msgstr ""
+msgstr "遠端主機名或 ip 位址"
 
 msgid "Remote ping timeout"
-msgstr ""
+msgstr "遠端 ping 超時"
 
 msgid "Renegotiate data chan. key after bytes"
-msgstr ""
+msgstr "傳輸若干位元組後重新驗證資料通道金鑰"
 
 msgid "Renegotiate data chan. key after packets"
-msgstr ""
+msgstr "傳輸若干資料包後重新驗證資料通道金鑰"
 
 msgid "Renegotiate data chan. key after seconds"
-msgstr ""
+msgstr "傳輸若干秒後重新驗證資料通道金鑰"
 
 msgid "Replay protection sliding window size"
-msgstr ""
+msgstr "重播保護的滑動視窗大小"
 
 msgid "Require explicit designation on certificate"
-msgstr ""
+msgstr "證書需要顯式指定"
 
 msgid "Require explicit key usage on certificate"
-msgstr ""
+msgstr "證書需要明確的金鑰"
 
 msgid "Restart after remote ping timeout"
-msgstr ""
+msgstr "遠端 ping 超時後重啟"
 
 msgid "Retransmit timeout on TLS control channel"
-msgstr ""
+msgstr "TLS 控制通道超時後重新發送"
 
 msgid "Retry indefinitely on HTTP proxy errors"
-msgstr ""
+msgstr "無限重試直至代理正確"
 
 msgid "Retry indefinitely on Socks proxy errors"
-msgstr ""
+msgstr "無限重試直至 Socks 代理正確"
 
 msgid "Route subnet to client"
-msgstr ""
+msgstr "路由子網至客戶端"
 
 msgid "Run as an inetd or xinetd server"
-msgstr ""
+msgstr "以 inetd 或 xinetd 伺服器的方式執行"
 
 msgid "Run script cmd on client connection"
-msgstr ""
+msgstr "當客戶端連線時在命令列下允許指令碼"
 
 msgid "Run script cmd on client disconnection"
-msgstr ""
+msgstr "當客戶端斷開時在命令列下允許指令碼"
 
 msgid "Run up/down scripts for all restarts"
-msgstr ""
+msgstr "每次重啟都執行啟動/關閉指令碼"
 
 msgid "Send notification to peer on disconnect"
-msgstr ""
+msgstr "斷開連線時向客戶端傳送通知"
 
 msgid "Set GID to group"
-msgstr ""
+msgstr "為群組設定 GID 值"
 
 msgid "Set TCP/UDP MTU"
-msgstr ""
+msgstr "設定 TCP/UDP 的 MTU 值"
 
 msgid "Set UID to user"
-msgstr ""
+msgstr "為使用者設定 UID 值"
 
 msgid "Set aside a pool of subnets"
-msgstr ""
+msgstr "設定子網池"
 
 msgid "Set extended HTTP proxy options"
-msgstr ""
+msgstr "設定 HTTP 擴充套件代理選項"
 
 msgid "Set output verbosity"
-msgstr ""
+msgstr "設定輸出冗餘級別"
 
 msgid "Set size of real and virtual address hash tables"
-msgstr ""
+msgstr "設定實際和虛擬位址的雜湊表大小"
 
 msgid "Set the TCP/UDP receive buffer size"
-msgstr ""
+msgstr "設定 TCP/UDP 接收緩衝區大小"
 
 msgid "Set the TCP/UDP send buffer size"
-msgstr ""
+msgstr "設定 TCP/UDP 傳送緩衝區大小"
 
 msgid "Set tun/tap TX queue length"
-msgstr ""
+msgstr "設定 tun/tap 傳送佇列長度"
 
 msgid "Set tun/tap adapter parameters"
-msgstr ""
+msgstr "設定 tun/tap 介面卡引數"
 
 msgid "Set tun/tap device MTU"
-msgstr ""
+msgstr "設定 tun/tap 裝置的 MTU 值"
 
 msgid "Set tun/tap device overhead"
-msgstr ""
+msgstr "設定 tun/tap 裝置的開銷"
 
 msgid "Set upper bound on TCP MSS"
-msgstr ""
+msgstr "設定 TCP MSS 上限"
 
 msgid "Shaping for peer bandwidth"
-msgstr ""
+msgstr "改變結點頻寬"
 
 msgid "Shell cmd to execute after tun device open"
-msgstr ""
+msgstr "tun 裝置開啟後執行的 shell 命令"
 
 msgid "Shell cmd to run after tun device close"
-msgstr ""
+msgstr "tun 裝置關閉後執行的 shell 命令"
 
 msgid "Shell command to verify X509 name"
-msgstr ""
+msgstr "執行 shell 命令以驗證 X509 名稱"
 
 msgid "Silence the output of replay warnings"
-msgstr ""
+msgstr "以靜音的方式發出重播警告"
 
 msgid "Size of cipher key"
-msgstr ""
+msgstr "金鑰大小"
 
 msgid "Specify a default gateway for routes"
-msgstr ""
+msgstr "指定路由預設閘道器"
 
 msgid "Start OpenVPN in a hibernating state"
-msgstr ""
+msgstr "以休眠的狀態開啟 OpenVPN"
 
 msgid "Start/Stop"
-msgstr ""
+msgstr "啟動/停止"
 
 msgid "Started"
-msgstr ""
+msgstr "已執行的"
 
 msgid "Status file format version"
-msgstr ""
+msgstr "顯式檔案格式版本的狀態"
 
 msgid "Switch to advanced configuration »"
-msgstr ""
+msgstr "高階配置 »"
 
 msgid "TCP/UDP port # for both local and remote"
-msgstr ""
+msgstr "TCP/UDP 埠 # 同時針對本地和遠端"
 
 msgid "TCP/UDP port # for local (default=1194)"
-msgstr ""
+msgstr "TCP/UDP 埠 # 本地(預設 1194)"
 
 msgid "TCP/UDP port # for remote (default=1194)"
-msgstr ""
+msgstr "TCP/UDP 埠 # 遠端(預設 1194)"
 
 msgid "TLS cipher"
-msgstr ""
+msgstr "TLS 加密"
 
 msgid "TOS passthrough (applies to IPv4 only)"
-msgstr ""
+msgstr "TOS 穿透(僅限 IPv4)"
 
 msgid "Temporary directory for client-connect return file"
-msgstr ""
+msgstr "客戶端連線返回檔案的臨時目錄"
 
 msgid "The highest supported TLS version"
-msgstr ""
+msgstr "最高支援的 TLS 版本"
 
 msgid "The key direction for 'tls-auth' and 'secret' options"
-msgstr ""
+msgstr "“tls-auth”和“secret”選項的金鑰型別"
 
 msgid "The lowest supported TLS version"
-msgstr ""
+msgstr "最低支援的 TLS 版本"
 
 msgid "Timeframe for key exchange"
-msgstr ""
+msgstr "金鑰交換時間表"
 
 msgid "Type of used device"
-msgstr ""
+msgstr "使用裝置型別"
 
 msgid "Use fast LZO compression"
-msgstr ""
+msgstr "使用快速 LZO 壓縮"
 
 msgid "Use individual addresses rather than /30 subnets"
-msgstr ""
+msgstr "使用獨立的位址代替 /30 子網"
 
 msgid "Use protocol"
-msgstr ""
+msgstr "採用協議"
 
 msgid "Use tun/tap device node"
-msgstr ""
+msgstr "使用 tun/tap 裝置節點"
 
 msgid "Use username as common name"
-msgstr ""
+msgstr "把使用者名稱作為通用名稱"
 
 msgid "Write log to file"
-msgstr ""
+msgstr "儲存日誌至檔案"
 
 msgid "Write process ID to file"
-msgstr ""
+msgstr "記錄程序 ID 至檔案"
 
 msgid "Write status to file every n seconds"
-msgstr ""
+msgstr "每 n 秒後寫入狀態至檔案"
 
 msgid "no"
-msgstr ""
+msgstr ""
 
 msgid "tun/tap device"
-msgstr ""
+msgstr "tun/tap 裝置"
 
 msgid "tun/tap inactivity timeout"
-msgstr ""
+msgstr "tun/tap 休眠超時"
 
 msgid "yes (%i)"
-msgstr ""
+msgstr "是(%i)"
 
 msgid "« Switch to basic configuration"
-msgstr ""
+msgstr "« 基本配置"
+
+#~ msgid "Cryptography"
+#~ msgstr "加密"
+
+#~ msgid "Networking"
+#~ msgstr "網路"
+
+#~ msgid "Service"
+#~ msgstr "服務"
+
+#~ msgid "VPN"
+#~ msgstr "VPN"
index de36381..8ebac37 100644 (file)
@@ -1,3 +1,7 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+
 msgid "Block Time"
 msgstr "Tempo de bloqueio"
 
index 7d6c080..e6f6313 100644 (file)
@@ -21,7 +21,7 @@ msgid ""
 "First you have to install the packages to get support for USB (kmod-usb-"
 "printer) or parallel port (kmod-lp)."
 msgstr ""
-"首先必須安裝軟體包以便獲得USB (kmod-usb-printer)或串列埠(kmod-lp)的支援."
+"首先必須安裝軟體包以便獲得USB (kmod-usb-printer)或串列埠(kmod-lp)的支援."
 
 msgid "Interface"
 msgstr ""
index 0be8258..5545c05 100644 (file)
@@ -1,15 +1,18 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-10-08 18:42+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-10-28 16:41+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Email Addresses that Receive Voicemail"
 msgstr "接收语音邮箱的电子邮箱地址"
@@ -28,8 +31,10 @@ msgid ""
 "SMTP server), and provide a list of addresses that receive recorded "
 "voicemail."
 msgstr ""
-"在这里,你可以为PBX配置一个全球性的语音邮件。由于这个系统运行在嵌入式系统中,如路由器,没有本地存储语音邮件 - 它必须通过电子邮件发送出去。因此,你"
-"需要配置一个外发邮件(SMTP)服务器(例如您的ISP,谷歌或雅虎的SMTP服务器),并提供接收记录语音信箱的地址的列表。"
+"在这里,您可以为 PBX 配置一个全球性的语音邮件。由于这个系统运行在嵌入式系统"
+"中,如路由器,这里并无本地语言邮件的储存空间 - 它必须通过电子邮件发送出去。因"
+"此,您需要配置一个外发邮件(SMTP)服务器(例如您的 ISP、谷歌或雅虎的 SMTP 服"
+"务器),并提供接收记录语音信箱的地址的列表。"
 
 msgid ""
 "In order for this PBX to send emails containing voicemail recordings, you "
@@ -37,11 +42,12 @@ msgid ""
 "for that purpose. You can also set up a third party SMTP server such as the "
 "one provided by Google or Yahoo."
 msgstr ""
-"为了这个PBX发送包含语音信箱录音的电子邮件,你需要在这里设置一个SMTP服务器。您的ISP通常会提供一个SMTP服务器。您也可以设立一个第三方的SMT"
-"P服务器,像谷歌或雅虎。"
+"为了这个 PBX 发送包含语音信箱录音的电子邮件,您需要在这里设置一个 SMTP 服务"
+"器。您的 ISP 通常会提供一个 SMTP 服务器。您也可以设立一个第三方的 SMTP 服务"
+"器,如谷歌或雅虎那样。"
 
 msgid "Last Sent Voicemail Log"
-msgstr "最后发送的语音信箱日志"
+msgstr "上一次发送语音信箱的日志"
 
 msgid "Local Storage Directory"
 msgstr "本地存储目录"
@@ -53,22 +59,22 @@ msgid "Outgoing mail (SMTP) Server"
 msgstr "电子邮件发送服务器(SMTP)"
 
 msgid "SMTP Password"
-msgstr "SMTP登录密码"
+msgstr "SMTP 登录密码"
 
 msgid "SMTP Port Number"
-msgstr "SMTP端口"
+msgstr "SMTP 端口"
 
 msgid "SMTP Server Authentication"
-msgstr "SMTP服务器认证"
+msgstr "SMTP 服务器认证"
 
 msgid "SMTP Server Hostname or IP Address"
-msgstr "SMTP服务器主机名或IP地址"
+msgstr "SMTP 服务器主机名或 IP 地址"
 
 msgid "SMTP User Name"
-msgstr "SMTP用户名"
+msgstr "SMTP 用户名"
 
 msgid "Secure Connection Using TLS"
-msgstr "使用TLS安全连接"
+msgstr "使用 TLS 安全连接"
 
 msgid "Voicemail Setup"
 msgstr "语音邮箱设置"
@@ -77,7 +83,9 @@ msgid ""
 "When you enable voicemail, you will have the opportunity to specify email "
 "addresses that receive recorded voicemail. You must also set up an SMTP "
 "server below."
-msgstr "当你启用了语音信箱,你将要指定接收记录语音信箱的电子邮件地址。您还必须设置下面的SMTP服务器"
+msgstr ""
+"当您启用了语音信箱,您将可以指定接收记录语音信箱的电子邮件地址。您也必须在下"
+"面设置 SMTP 服务器。"
 
 msgid "Yes"
 msgstr "是"
@@ -88,10 +96,12 @@ msgid ""
 "limited space on embedded devices like routers, and enable this option only "
 "if you know what you are doing."
 msgstr ""
-"您也可以保留您的PBX语音信箱留言的副本在你运行的设备上。此处指定的路径当不存在时,将被创建。谨防嵌入式设备上有限的存取空间,如路由器,所以此选项只有你"
-"当知道处理时才可使用。"
+"您也可以在您运行 PBX 的设备上保留语音信箱留言的副本。此处指定的路径当不存在"
+"时,将会创建。谨防嵌入式设备上有限的存取空间,如路由器,所以此选项只有当您确"
+"定用途时才可使用。"
 
 msgid ""
 "Your real SMTP password is not shown for your protection. It will be changed "
 "only when you change the value in this box."
-msgstr "为了保护您真正的SMTP密码不显示。该选项需要更改。"
+msgstr ""
+"为了保护您,真正的 SMTP 密码将不会显示。只有当您改变框中的数值时它才会变更。"
index 14de629..8464289 100644 (file)
@@ -1,24 +1,27 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-14 18:41+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-10-28 16:41+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Email Addresses that Receive Voicemail"
-msgstr "接收語音郵件的信箱位址"
+msgstr "接收語音郵箱的電子郵箱位址"
 
 msgid "Enable Voicemail"
-msgstr "啟用語音郵件功能"
+msgstr "啟用語音郵"
 
 msgid "Global Voicemail Setup"
-msgstr "語音郵件通用設定"
+msgstr "全域性語音郵箱設定"
 
 msgid ""
 "Here you can configure a global voicemail for this PBX. Since this system is "
@@ -28,9 +31,10 @@ msgid ""
 "SMTP server), and provide a list of addresses that receive recorded "
 "voicemail."
 msgstr ""
-"在這裡可以幫PBX總機設定通用語音郵件. 因為這個系統想要像路由器一般跑在嵌入式系統, 這裡並無本地語言郵件的儲存空間 - 它必須由郵件來傳送. "
-"因此你需要設定一個(SMTP)外寄郵件伺服器(例如你的ISP, Google, 或者Yahoo外寄郵件伺服器), "
-"並且提供一個位址清單可以接收錄音檔的語音郵件."
+"在這裡,您可以為 PBX 配置一個全球性的語音郵件。由於這個系統執行在嵌入式系統"
+"中,如路由器,這裡並無本地語言郵件的儲存空間 - 它必須通過電子郵件傳送出去。因"
+"此,您需要配置一個外發郵件(SMTP)伺服器(例如您的 ISP、谷歌或雅虎的 SMTP 服"
+"務器),並提供接收記錄語音信箱的位址的列表。"
 
 msgid ""
 "In order for this PBX to send emails containing voicemail recordings, you "
@@ -38,50 +42,53 @@ msgid ""
 "for that purpose. You can also set up a third party SMTP server such as the "
 "one provided by Google or Yahoo."
 msgstr ""
-"為了幫PBX總機傳送附帶語音郵件錄音檔, 你必須設定一個(SMTP)外寄郵件伺服器.通常你的ISP會提供一個SMTP外寄郵件伺服器讓客戶寄信,.你也可以"
-"設定第三方SMTP外寄郵件伺服器類似Google或Yahoo提供的也行."
+"為了這個 PBX 傳送包含語音信箱錄音的電子郵件,您需要在這裡設定一個 SMTP 服務"
+"器。您的 ISP 通常會提供一個 SMTP 伺服器。您也可以設立一個第三方的 SMTP 服務"
+"器,如谷歌或雅虎那樣。"
 
 msgid "Last Sent Voicemail Log"
-msgstr "上一次傳送語音郵件的記錄"
+msgstr "上一次傳送語音信箱的日誌"
 
 msgid "Local Storage Directory"
-msgstr "本地儲存目錄"
+msgstr "本地儲存目錄"
 
 msgid "No"
-msgstr "No"
+msgstr ""
 
 msgid "Outgoing mail (SMTP) Server"
-msgstr "外寄郵件(SMTP)伺服器"
+msgstr "電子郵件傳送伺服器(SMTP)"
 
 msgid "SMTP Password"
-msgstr "外寄郵件(SMTP)伺服器傳送密碼"
+msgstr "SMTP 登入密碼"
 
 msgid "SMTP Port Number"
-msgstr "外寄郵件(SMTP)伺服器服務埠號"
+msgstr "SMTP 埠"
 
 msgid "SMTP Server Authentication"
-msgstr "外寄郵件(SMTP)伺服器驗證"
+msgstr "SMTP 伺服器認證"
 
 msgid "SMTP Server Hostname or IP Address"
-msgstr "外寄郵件(SMTP)伺服器主機名稱或者IP位址"
+msgstr "SMTP 伺服器主機名或 IP 位址"
 
 msgid "SMTP User Name"
-msgstr "外寄郵件(SMTP)伺服器登入使用者名稱"
+msgstr "SMTP 使用者名稱"
 
 msgid "Secure Connection Using TLS"
-msgstr "採用TLS加密協議安全連線"
+msgstr "使用 TLS 安全連線"
 
 msgid "Voicemail Setup"
-msgstr "設å®\9aèª\9eé\9f³é\83µä»¶"
+msgstr "èª\9eé\9f³é\83µç®±è¨­å®\9a"
 
 msgid ""
 "When you enable voicemail, you will have the opportunity to specify email "
 "addresses that receive recorded voicemail. You must also set up an SMTP "
 "server below."
-msgstr "當你啟用語音郵件功能, 擬將有機會指定特定可接收錄音檔的語音郵件的郵件位址. 你也必須在下面設定外寄郵件(SMTP)伺服器."
+msgstr ""
+"當您啟用了語音信箱,您將可以指定接收記錄語音信箱的電子郵件位址。您也必須在下"
+"面設定 SMTP 伺服器。"
 
 msgid "Yes"
-msgstr "Yes"
+msgstr ""
 
 msgid ""
 "You can also retain copies of voicemail messages on the device running your "
@@ -89,10 +96,12 @@ msgid ""
 "limited space on embedded devices like routers, and enable this option only "
 "if you know what you are doing."
 msgstr ""
-"你也可以保留語音郵件訊息的複本在PBX總機的設備上. 這裡所指定的路徑如果它不存在時將會被建立. 為預防像路由器的嵌入式設備有限的空間限制, "
-"如果你確定這個用途請啟用這個選項."
+"您也可以在您執行 PBX 的裝置上保留語音信箱留言的副本。此處指定的路徑當不存在"
+"時,將會建立。謹防嵌入式裝置上有限的存取空間,如路由器,所以此選項只有當您確"
+"定用途時才可使用。"
 
 msgid ""
 "Your real SMTP password is not shown for your protection. It will be changed "
 "only when you change the value in this box."
-msgstr "為了保護你的SMTP密碼將不會顯示. 只有當你改變盒子中的值時它將會被變更"
+msgstr ""
+"為了保護您,真正的 SMTP 密碼將不會顯示。只有當您改變框中的數值時它才會變更。"
index 8ac03e1..45325b9 100644 (file)
@@ -93,7 +93,7 @@ msgid ""
 "experiment to make sure you are blocking numbers from your desired area "
 "successfully."
 msgstr ""
-"输入你想自动屏蔽的电话号码。你应该忽略国家代码和任何前导零,但请测试来确保你成"
+"输入您想自动屏蔽的电话号码。您应该忽略国家代码和任何前导零,但请测试来确保您成"
 "功屏蔽了想要屏蔽的号码。"
 
 msgid ""
index aa05be7..603b9df 100644 (file)
@@ -93,14 +93,14 @@ msgid ""
 "experiment to make sure you are blocking numbers from your desired area "
 "successfully."
 msgstr ""
-"打入你允許自動通話的號碼. 你或許可以忽略國碼和0字開頭, 但僅供實驗以確保期望區"
+"打入您允許自動通話的號碼. 您或許可以忽略國碼和0字開頭, 但僅供實驗以確保期望區"
 "的號碼被阻斷成功."
 
 msgid ""
 "Enter this IP (or IP:port) in the Server/Registrar setting of SIP devices "
 "you will use ONLY locally and never from a remote location."
 msgstr ""
-"要設定SIP設備在Server/Registrar內打入IP(或IP:埠號)僅能本地端使用絕不要打入"
+"要設定SIP設備在Server/Registrar內打入IP(或IP:埠號)僅能本地端使用絕不要打入"
 "遠端位置"
 
 msgid ""
@@ -466,7 +466,7 @@ msgid ""
 msgstr ""
 
 msgid "You can specify a real name to show up in the Caller ID here."
-msgstr "可以在此指定一個真實名稱以便顯示在來電ID"
+msgstr "可以在此指定一個真實名稱以便顯示在來電ID"
 
 msgid ""
 "You can use your SIP devices/softphones with this system from a remote "
@@ -481,10 +481,10 @@ msgid ""
 "port and RTP range) to the IP address of the device running this PBX."
 msgstr ""
 "不管多遠,只要能取得ISP提供的公眾合法IP,依然可以使用這個系統的SIP設備/PC電話表"
-"現一樣的好.你將能夠免費呼叫其他本地端用戶(e.g 其它類比電話機(ATAs)和使用你的"
-"VoIP供應商講電話就像在使用本地的PBX總機電話一樣.在設定這個標籤後, 需回到用"
+"現一樣的好.您將能夠免費呼叫其他本地端用戶(e.g 其它類比電話機(ATAs)和使用您的"
+"VoIP供應商講電話就像在使用本地的PBX總機電話一樣.在設定這個標籤後, 需回到用"
 "戶設定並且查看新的伺服器和埠設定以便能設定遠端SIP設備.請注意假如PBX總機若不在"
-"你的路由器/GW上執行,你將必須在你的路由器/GW上設定埠轉發(NAT).在PBX主機上請轉"
+"您的路由器/GW上執行,您將必須在您的路由器/GW上設定埠轉發(NAT).在PBX主機上請轉"
 "發下列(SIP埠+RTP所採用的範圍埠)埠號址定到跑PBX服務設備上的IP位址."
 
 msgid ""
@@ -492,14 +492,14 @@ msgid ""
 "when you enter a value different from the saved one. Leaving the PIN empty "
 "is possible, but please beware of the security implications."
 msgstr ""
-"當存檔時為保護起見你的PIN碼將不會顯示. 除非你打入不同於原始存檔的值它才會變"
+"當存檔時為保護起見您的PIN碼將不會顯示. 除非您打入不同於原始存檔的值它才會變"
 "更. 也可以把PIN碼保留空白, 但要提防會有安全的隱憂."
 
 msgid ""
 "Your password disappears when saved for your protection. It will be changed "
 "only when you enter a value different from the saved one."
 msgstr ""
-"當存檔時為保護起見你的密碼將不會顯示. 除非你打入不同於原始存檔的值它才會變更."
+"當存檔時為保護起見您的密碼將不會顯示. 除非您打入不同於原始存檔的值它才會變更."
 
 #~ msgid ""
 #~ "Designate numbers that are allowed to call through this system and which "
index 7dcbe23..0b3a1dc 100644 (file)
@@ -1,15 +1,18 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-10-09 03:47+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-10-29 14:56+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Advanced Settings"
 msgstr "高级设置"
@@ -18,21 +21,21 @@ msgid "Allowed clients"
 msgstr "允许的客户端"
 
 msgid "Always use system DNS resolver"
-msgstr "始终使用系统DNS解析"
+msgstr "始终使用系统 DNS 解析"
 
 msgid ""
 "Basic HTTP authentication supported. Provide username and password in "
 "username:password format."
-msgstr "支持HTTP基本身份验证。提供用户名和密码格式为:用户名:密码。"
+msgstr "支持 HTTP 基本身份验证。提供用户名和密码格式为:用户名:密码。"
 
 msgid "Configuration"
 msgstr "配置"
 
 msgid "DNS and Query Settings"
-msgstr "DNS查询设置"
+msgstr "DNS 及查询设置"
 
 msgid "DNS server address"
-msgstr "DNS地址"
+msgstr "DNS 服务器地址"
 
 msgid "Delete cache files time"
 msgstr "清除缓存文件周期"
@@ -41,22 +44,22 @@ msgid "Disk cache location"
 msgstr "磁盘缓存位置"
 
 msgid "Do not query IPv6"
-msgstr "不能查询IPv6"
+msgstr "不能查询 IPv6"
 
 msgid "Enable if cache (proxy) is shared by multiple users."
 msgstr "允许多用户共享缓存(代理)。"
 
 msgid "First PMM segment size (in bytes)"
-msgstr "第一的PMM段的大小(字节为单位)"
+msgstr "第一 PMM 段大小(以字节表示)"
 
 msgid "General Settings"
 msgstr "通用设置"
 
 msgid "How much RAM should Polipo use for its cache."
-msgstr ""
+msgstr "允许 Polipo 做缓存的 RAM 使用量"
 
 msgid "In RAM cache size (in bytes)"
-msgstr ""
+msgstr "RAM 缓存大小(以字节表示)"
 
 msgid "Listen address"
 msgstr "监听地址"
@@ -68,51 +71,53 @@ msgid ""
 "Location where polipo will cache files permanently. Use of external storage "
 "devices is recommended, because the cache can grow considerably. Leave it "
 "empty to disable on-disk cache."
-msgstr "polipo将永久缓存文件。建议使用外部存储设备,因为缓存会一直增长。留空表示禁用磁盘缓存。"
+msgstr ""
+"Polipo 持久缓存文件位置。建议使用外部存储设备,因为缓存会一直增长。留空表示禁"
+"用磁盘缓存。"
 
 msgid "Log file location"
 msgstr "日志存放位置"
 
 msgid "Log to syslog"
-msgstr "吐日志到syslog"
+msgstr "记录日志到 syslog"
 
 msgid "Logging and RAM"
-msgstr ""
+msgstr "记录和 RAM"
 
 msgid "Never use system DNS resolver"
-msgstr "从不使用系统DNS解析"
+msgstr "从不使用系统 DNS 解析"
 
 msgid "On-Disk Cache"
 msgstr "磁盘缓存"
 
 msgid "PMM segments size (in bytes)"
-msgstr ""
+msgstr "PMM 段大小(以字节表示)"
 
 msgid "Parent Proxy"
-msgstr ""
+msgstr "上层代理"
 
 msgid "Parent proxy address"
-msgstr ""
+msgstr "上层代理地址"
 
 msgid ""
 "Parent proxy address (in host:port format), to which Polipo will forward the "
 "requests."
-msgstr ""
+msgstr "Polipo 应该转发请求所到的上层代理(以 主机:端口号 格式表示)。"
 
 msgid "Parent proxy authentication"
-msgstr ""
+msgstr "上层代理地址验证"
 
 msgid "Polipo"
-msgstr ""
+msgstr "Polipo"
 
 msgid "Polipo Status"
-msgstr ""
+msgstr "Polipo 状态"
 
 msgid "Polipo is a small and fast caching web proxy."
-msgstr ""
+msgstr "Polipo 是一个小型且快速的网页缓存代理。"
 
 msgid "Poor Man's Multiplexing"
-msgstr ""
+msgstr "穷人的多工复用器"
 
 msgid ""
 "Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by "
@@ -120,86 +125,92 @@ msgid ""
 "caused by the weakness of HTTP protocol. NOTE: some sites may not work with "
 "PMM enabled."
 msgstr ""
+"穷人的多工复用器(PMM)是通过在多个区段中请求单个实例来模拟复用的技术。它尝试"
+"降低由 HTTP 协议的弱点引起的延迟。注意:某些站点可能无法启用 PMM。"
 
 msgid "Port on which Polipo will listen"
-msgstr ""
+msgstr "Polipo 监听的端口号"
 
 msgid "Proxy"
-msgstr ""
+msgstr "代理服务器"
 
 msgid "Query DNS by hostname"
-msgstr ""
+msgstr "以主机名称查询 DNS"
 
 msgid "Query DNS directly, fallback to system resolver"
-msgstr ""
+msgstr "直接查询 DNS,失败时退回系统解析"
 
 msgid "Query DNS directly, for unknown hosts fall back to system resolver"
-msgstr ""
+msgstr "直接查询 DNS,对未知的主机退回系统解析"
 
 msgid "Query DNS for IPv6"
-msgstr ""
+msgstr "为 IPv6 查询 DNS"
 
 msgid "Query IPv4 and IPv6, prefer IPv4"
-msgstr ""
+msgstr "查询 IPv4 和 IPv6,IPv4 优先"
 
 msgid "Query IPv4 and IPv6, prefer IPv6"
-msgstr ""
+msgstr "查询 IPv4 和 IPv6,IPv6 优先"
 
 msgid "Query only IPv6"
-msgstr ""
+msgstr "只查询 IPv6"
 
 msgid ""
 "Set the DNS server address to use, if you want Polipo to use different DNS "
 "server than the host system."
 msgstr ""
+"设置 DNS 服务器地址以便使用,假如您要让 Polipo 使用不同的 DNS 服务器,而非主"
+"机系统的。"
 
 msgid "Shared cache"
-msgstr ""
+msgstr "共享的缓存"
 
 msgid ""
 "Size of the first PMM segment. If not defined, it defaults to twice the PMM "
 "segment size."
-msgstr ""
+msgstr "第一个 PMM 段的大小,若未定义,默认为两倍 PMM 段的大小。"
 
 msgid "Size to which cached files should be truncated"
-msgstr ""
+msgstr "缓存文件应截断为的大小"
 
 msgid "Status"
-msgstr ""
+msgstr "状态"
 
 msgid "Syslog facility"
-msgstr ""
+msgstr "日志设施"
 
 msgid ""
 "The interface on which Polipo will listen. To listen on all interfaces use "
 "0.0.0.0 or :: (IPv6)."
-msgstr ""
+msgstr "Polipo 将会监听的接口。要监听所有接口,请使用 0.0.0.0 或 ::(IPv6)。"
 
 msgid "Time after which cached files will be deleted"
-msgstr ""
+msgstr "缓存删除前的留存时间"
 
 msgid "Time after which cached files will be truncated"
-msgstr ""
+msgstr "缓存截断前的留存时间"
 
 msgid "To enable PMM, PMM segment size must be set to some positive value."
-msgstr ""
+msgstr "要启用 PMM,PMM 段大小必须为正。"
 
 msgid "Truncate cache files size (in bytes)"
-msgstr ""
+msgstr "缓存文件截断大小(以字节为单位)"
 
 msgid "Truncate cache files time"
-msgstr ""
+msgstr "缓存文件截断时间"
 
 msgid ""
 "Use of external storage device is recommended, because the log file is "
 "written frequently and can grow considerably."
-msgstr ""
+msgstr "推荐使用外部存储设备,因为日志文件经常写入,将会迅速增长。"
 
 msgid ""
 "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients "
 "that are allowed to connect. The format is IP address or network address "
 "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))"
 msgstr ""
+"当监听地址设置为 0.0.0.0 或 ::(IPv6)时,必须列出允许连接的客户端。格式为 "
+"IP 地址或网络地址(192.168.1.123,192.168.1.0/24,2001:660:116::/48(IPv6))"
 
 msgid "enable"
-msgstr ""
+msgstr "启用"
index 5058897..cf3c943 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-21 13:13+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
+"PO-Revision-Date: 2017-10-29 14:56+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Advanced Settings"
-msgstr "é\80²階設定"
+msgstr "é«\98階設定"
 
 msgid "Allowed clients"
 msgstr "允許的客戶端"
 
 msgid "Always use system DNS resolver"
-msgstr "總是採用系統使用的DNS解析"
+msgstr "始終使用系統 DNS 解析"
 
 msgid ""
 "Basic HTTP authentication supported. Provide username and password in "
 "username:password format."
-msgstr "基本的HTTP驗證支援. 提供使用者名稱和密碼以username:password格式"
+msgstr "支援 HTTP 基本身份驗證。提供使用者名稱和密碼格式為:使用者名稱:密碼。"
 
 msgid "Configuration"
-msgstr "設定"
+msgstr "配置"
 
 msgid "DNS and Query Settings"
-msgstr "DNS及查詢設定值"
+msgstr "DNS 及查詢設定"
 
 msgid "DNS server address"
-msgstr "DNS伺服器位址"
+msgstr "DNS 伺服器位址"
 
 msgid "Delete cache files time"
-msgstr "刪除快取檔的時間"
+msgstr "清除快取檔案週期"
 
 msgid "Disk cache location"
-msgstr "磁碟快取放置的位置"
+msgstr "磁碟快取位置"
 
 msgid "Do not query IPv6"
-msgstr "不使用IPv6查詢"
+msgstr "不能查詢 IPv6"
 
 msgid "Enable if cache (proxy) is shared by multiple users."
-msgstr "å\81\87è\8b¥å¿«å\8f\96(Proxy)被å¤\9aå\80\8b使ç\94¨è\80\85å\88\86享使ç\94¨å°±å\95\93ç\94¨"
+msgstr "å\85\81許å¤\9a使ç\94¨è\80\85å\85±äº«å¿«å\8f\96ï¼\88代ç\90\86ï¼\89ã\80\82"
 
 msgid "First PMM segment size (in bytes)"
-msgstr "第一個PMM段的大小(以bytes方式表示)"
+msgstr "第一 PMM 段大小(以位元組表示)"
 
 msgid "General Settings"
-msgstr "基本設定"
+msgstr "通用設定"
 
 msgid "How much RAM should Polipo use for its cache."
-msgstr "Polipo拿來當快取的記憶體量是多大?"
+msgstr "允許 Polipo 做快取的 RAM 使用量"
 
 msgid "In RAM cache size (in bytes)"
-msgstr "記憶體快取大小(以bytes方式表示)"
+msgstr "RAM 快取大小(以位元組表示)"
 
 msgid "Listen address"
-msgstr "聽位址"
+msgstr "聽位址"
 
 msgid "Listen port"
-msgstr "聆聽埠號"
+msgstr "監聽埠"
 
 msgid ""
 "Location where polipo will cache files permanently. Use of external storage "
 "devices is recommended, because the cache can grow considerably. Leave it "
 "empty to disable on-disk cache."
-msgstr "Polipo位置將永久快取文件。建議使用外部的存儲設備,因為快取會顯著增長。保留空白以便關閉磁碟快取."
+msgstr ""
+"Polipo 持久快取檔案位置。建議使用外部儲存裝置,因為快取會一直增長。留空表示禁"
+"用磁碟快取。"
 
 msgid "Log file location"
-msgstr "紀錄檔位置"
+msgstr "日誌存放位置"
 
 msgid "Log to syslog"
-msgstr "記錄到系統記錄syslog中"
+msgstr "記錄日誌到 syslog"
 
 msgid "Logging and RAM"
-msgstr "記錄和記憶體"
+msgstr "記錄和 RAM"
 
 msgid "Never use system DNS resolver"
-msgstr "從不使用系統DNS解析"
+msgstr "從不使用系統 DNS 解析"
 
 msgid "On-Disk Cache"
-msgstr "磁碟上的快取"
+msgstr "磁碟快取"
 
 msgid "PMM segments size (in bytes)"
-msgstr "PMM段大小(以bytes表示)"
+msgstr "PMM 段大小(以位元組表示)"
 
 msgid "Parent Proxy"
-msgstr "上層Proxy"
+msgstr "上層代理"
 
 msgid "Parent proxy address"
-msgstr "上層Proxy位址"
+msgstr "上層代理位址"
 
 msgid ""
 "Parent proxy address (in host:port format), to which Polipo will forward the "
 "requests."
-msgstr "Polipo應該重導這個要求所到的上層Proxy(以 主機:埠號 格式表示)."
+msgstr "Polipo 應該轉發請求所到的上層代理(以 主機:埠號 格式表示)。"
 
 msgid "Parent proxy authentication"
-msgstr "上層Proxy位址驗證"
+msgstr "上層代理位址驗證"
 
 msgid "Polipo"
-msgstr "Polipo本地代理伺服器"
+msgstr "Polipo"
 
 msgid "Polipo Status"
-msgstr "Polipo狀況"
+msgstr "Polipo 狀態"
 
 msgid "Polipo is a small and fast caching web proxy."
-msgstr "Polipo是一個小型且快速的快取網頁代理"
+msgstr "Polipo 是一個小型且快速的網頁快取代理。"
 
 msgid "Poor Man's Multiplexing"
-msgstr "窮人的多工器Poor Man's Multiplexing"
+msgstr "窮人的多工複用器"
 
 msgid ""
 "Poor Man's Multiplexing (PMM) is a technique that simulates multiplexing by "
@@ -120,49 +125,53 @@ msgid ""
 "caused by the weakness of HTTP protocol. NOTE: some sites may not work with "
 "PMM enabled."
 msgstr ""
+"窮人的多工複用器(PMM)是通過在多個區段中請求單個例項來模擬複用的技術。它嘗試"
+"降低由 HTTP 協議的弱點引起的延遲。注意:某些站點可能無法啟用 PMM。"
 
 msgid "Port on which Polipo will listen"
-msgstr " Polipo聆聽的埠號"
+msgstr "Polipo 監聽的埠號"
 
 msgid "Proxy"
 msgstr "代理伺服器"
 
 msgid "Query DNS by hostname"
-msgstr "以主機名稱查詢DNS"
+msgstr "以主機名稱查詢 DNS"
 
 msgid "Query DNS directly, fallback to system resolver"
-msgstr "直接查詢DNS, 回傳給系統解析"
+msgstr "直接查詢 DNS,失敗時退回系統解析"
 
 msgid "Query DNS directly, for unknown hosts fall back to system resolver"
-msgstr "直接查詢DNS, 對莫名的主機回傳給系統解析"
+msgstr "直接查詢 DNS,對未知的主機退回系統解析"
 
 msgid "Query DNS for IPv6"
-msgstr "幫IPv6查詢DNS"
+msgstr "為 IPv6 查詢 DNS"
 
 msgid "Query IPv4 and IPv6, prefer IPv4"
-msgstr "查詢IPv4和IPv6,IPv4優先"
+msgstr "查詢 IPv4 和 IPv6,IPv4 優先"
 
 msgid "Query IPv4 and IPv6, prefer IPv6"
-msgstr "查詢IPv4和IPv6 ,IPv6優先"
+msgstr "查詢 IPv4 和 IPv6,IPv6 優先"
 
 msgid "Query only IPv6"
-msgstr "只查詢IPv6"
+msgstr "只查詢 IPv6"
 
 msgid ""
 "Set the DNS server address to use, if you want Polipo to use different DNS "
 "server than the host system."
-msgstr "設定DNS伺服器位址以便使用, 假如你要Polipo代理人使用不同的DNS伺服器而非主機系統."
+msgstr ""
+"設定 DNS 伺服器位址以便使用,假如您要讓 Polipo 使用不同的 DNS 伺服器,而非主"
+"機系統的。"
 
 msgid "Shared cache"
-msgstr "å\88\86享的快取"
+msgstr "å\85±享的快取"
 
 msgid ""
 "Size of the first PMM segment. If not defined, it defaults to twice the PMM "
 "segment size."
-msgstr "第一個PMM區段的大小, 假若沒定義 ,預設兩次PMM區段的大小."
+msgstr "第一個 PMM 段的大小,若未定義,預設為兩倍 PMM 段的大小。"
 
 msgid "Size to which cached files should be truncated"
-msgstr "快取檔被截斷的大小"
+msgstr "快取檔案應截斷為的大小"
 
 msgid "Status"
 msgstr "狀態"
@@ -173,33 +182,35 @@ msgstr "日誌設施"
 msgid ""
 "The interface on which Polipo will listen. To listen on all interfaces use "
 "0.0.0.0 or :: (IPv6)."
-msgstr "Polipo將會聆聽的介面. 要聆聽所有介面使用0.0.0.0 或 :: (IPv6)."
+msgstr "Polipo 將會監聽的介面。要監聽所有介面,請使用 0.0.0.0 或 ::(IPv6)。"
 
 msgid "Time after which cached files will be deleted"
-msgstr "å¿«å\8f\96å°\87æ\9c\83被å\88ªé\99¤的留存時間"
+msgstr "å¿«å\8f\96å\88ªé\99¤å\89\8d的留存時間"
 
 msgid "Time after which cached files will be truncated"
-msgstr "快取將會被斷頭的留存時間"
+msgstr "快取截斷前的留存時間"
 
 msgid "To enable PMM, PMM segment size must be set to some positive value."
-msgstr "要啟用PMM, PMM區段大小必須設定些積極的數值."
+msgstr "要啟用 PMM,PMM 段大小必須為正。"
 
 msgid "Truncate cache files size (in bytes)"
-msgstr ""
+msgstr "快取檔案截斷大小(以位元組為單位)"
 
 msgid "Truncate cache files time"
-msgstr ""
+msgstr "快取檔案截斷時間"
 
 msgid ""
 "Use of external storage device is recommended, because the log file is "
 "written frequently and can grow considerably."
-msgstr ""
+msgstr "推薦使用外部儲存裝置,因為日誌檔案經常寫入,將會迅速增長。"
 
 msgid ""
 "When listen address is set to 0.0.0.0 or :: (IPv6), you must list clients "
 "that are allowed to connect. The format is IP address or network address "
 "(192.168.1.123, 192.168.1.0/24, 2001:660:116::/48 (IPv6))"
 msgstr ""
+"當監聽位址設定為 0.0.0.0 或 ::(IPv6)時,必須列出允許連線的客戶端。格式為 "
+"IP 位址或網路位址(192.168.1.123,192.168.1.0/24,2001:660:116::/48(IPv6))"
 
 msgid "enable"
-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
diff --git a/applications/luci-app-privoxy/po/pt-br/privoxy.po b/applications/luci-app-privoxy/po/pt-br/privoxy.po
new file mode 100644 (file)
index 0000000..8d3eee2
--- /dev/null
@@ -0,0 +1,516 @@
+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 ""
+"A URL to be displayed in the error page that users will see if access to an "
+"untrusted page is denied."
+msgstr ""
+"A URL a ser exibida na página de erro que os usuários verão se o acesso a "
+"uma página não confiável é negado."
+
+msgid ""
+"A URL to documentation about the local Privoxy setup, configuration or "
+"policies."
+msgstr ""
+"A URL para a documentação sobre o Privoxy local, configuração ou políticas."
+
+msgid "A directory where Privoxy can create temporary files."
+msgstr "Um diretório onde Privoxy pode criar arquivos temporários."
+
+msgid "Access Control"
+msgstr "Controle de Acesso"
+
+msgid "Actions that are applied to all sites and maybe overruled later on."
+msgstr ""
+"Ações que são aplicadas a todos as páginas e talvez descartado mais tarde."
+
+msgid "An alternative directory where the templates are loaded from."
+msgstr "Um diretório alternativo de onde os modelos são carregados."
+
+msgid "An email address to reach the Privoxy administrator."
+msgstr "Um endereço de e-mail para alcançar o administrador do Privoxy."
+
+msgid ""
+"Assumed server-side keep-alive timeout (in seconds) if not specified by the "
+"server."
+msgstr ""
+"Tempo limite, em segundos, da manutenção da conexão (keep-alive) do servidor "
+"se não for especificado."
+
+msgid "Boot delay"
+msgstr "Atraso de iniciação"
+
+msgid "CGI user interface"
+msgstr "Interface de usuário CGI"
+
+msgid "Common Log Format"
+msgstr "Formato de registros (log) comum"
+
+msgid ""
+"Configure here the routing of HTTP requests through a chain of multiple "
+"proxies. Note that parent proxies can severely decrease your privacy level. "
+"Also specified here are SOCKS proxies."
+msgstr ""
+"Configure aqui o encaminhamento de pedidos HTTP através de uma cadeia de "
+"múltiplos proxies. Note-se que proxies pai pode diminuir muito o nível de "
+"privacidade. Também serão aceitos proxies SOCKS."
+
+msgid "Debug GIF de-animation"
+msgstr "Depurar de-animação GIF"
+
+msgid "Debug force feature"
+msgstr "Recurso de depuração forçado"
+
+msgid "Debug redirects"
+msgstr "Redirecionamentos de depuração"
+
+msgid "Debug regular expression filters"
+msgstr "Depuração de filtros de expressão regular"
+
+msgid "Delay (in seconds) during system boot before Privoxy start"
+msgstr ""
+"Atraso (em segundos) durante a inicialização do sistema antes do Privoxy "
+"iniciar"
+
+msgid "Directory does not exist!"
+msgstr "O diretório não existe!"
+
+msgid "Disabled == Transparent Proxy Mode"
+msgstr "Desativado == Modo Proxy Transparente"
+
+msgid "Documentation"
+msgstr "Documentação"
+
+msgid "During delay ifup-events are not monitored !"
+msgstr "Durante a espera, eventos ifup não serão monitorados!"
+
+msgid "Enable proxy authentication forwarding"
+msgstr "Habilitar o encaminhamento de autenticação de proxy"
+
+msgid ""
+"Enable/Disable autostart of Privoxy on system startup and interface events"
+msgstr ""
+"Ativar/Desativar a iniciação automática do Privoxy junto com a iniciação do "
+"sistema ou eventos de interface"
+
+msgid "Enable/Disable filtering when Privoxy starts."
+msgstr "Ativar / Desativar filtragem quando Privoxy iniciar."
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid ""
+"Enabling this option is NOT recommended if there is no parent proxy that "
+"requires authentication!"
+msgstr ""
+"A ativação dessa opção não é recomendado se não houver nenhum proxy pai que "
+"requer autenticação!"
+
+msgid "File '%s' not found inside Configuration Directory"
+msgstr "O arquivo '%s' não foi encontrado dentro do Diretório de Configuração"
+
+msgid "File not found or empty"
+msgstr "Arquivo não encontrado ou vazio"
+
+msgid "Files and Directories"
+msgstr "Arquivos e diretórios"
+
+msgid "For help use link at the relevant option"
+msgstr "Para ajuda, use o link na respectiva opção"
+
+msgid "Forwarding"
+msgstr "Encaminhando"
+
+msgid ""
+"If enabled, Privoxy hides the 'go there anyway' link. The user obviously "
+"should not be able to bypass any blocks."
+msgstr ""
+"Se ativado, Privoxy esconde o link \"ir lá de qualquer maneira\". O usuário, "
+"obviamente, não deve ser capaz de contornar qualquer bloqueio."
+
+msgid ""
+"If you intend to operate Privoxy for more users than just yourself, it might "
+"be a good idea to let them know how to reach you, what you block and why you "
+"do that, your policies, etc."
+msgstr ""
+"Se você pretende operar Privoxy para mais usuários do que apenas a si mesmo, "
+"pode ser uma boa ideia para que eles saibam como falar com você, o que você "
+"bloquear e por que você faz isso, as suas políticas, etc."
+
+msgid "Invalid email address"
+msgstr "Endereço de e-mail inválido"
+
+msgid "It is NOT recommended for the casual user."
+msgstr "Não é recomendado para o usuário casual."
+
+msgid "Location of the Privoxy User Manual."
+msgstr "Localização do Manual do Usuário do Privoxy."
+
+msgid "Log File Viewer"
+msgstr "Visualizador de arquivo de registros (log)"
+
+msgid "Log all data read from the network"
+msgstr "Registrar todos os dados lidos da rede"
+
+msgid "Log all data written to the network"
+msgstr "Registrar todos os dados gravados na rede"
+
+msgid "Log the applying actions"
+msgstr "Registrar as ações aplicadas"
+
+msgid ""
+"Log the destination for each request Privoxy let through. See also 'Debug "
+"1024'."
+msgstr ""
+"Registrar o destino para cada pedido que o Privoxy deixou passar. Consulte "
+"também 'Debug 1024'."
+
+msgid ""
+"Log the destination for requests Privoxy didn't let through, and the reason "
+"why."
+msgstr ""
+"Registrar o destino para os pedidos que o Privoxy não deixou passar, e a "
+"razão pela qual."
+
+msgid "Logging"
+msgstr "Registrando (logging)"
+
+msgid "Main actions file"
+msgstr "Arquivo principal de ações"
+
+msgid "Mandatory Input: No Data given!"
+msgstr "Entrada obrigatória: Dados não foram informados!"
+
+msgid "Mandatory Input: No Directory given!"
+msgstr "Entrada obrigatória: Nenhum Diretório foi informado!"
+
+msgid "Mandatory Input: No File given!"
+msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!"
+
+msgid "Mandatory Input: No Port given!"
+msgstr "Entrada obrigatória: Nenhuma Porta foi informado!"
+
+msgid "Mandatory Input: No files given!"
+msgstr "Entrada obrigatória: Nenhum Arquivo foi informado!"
+
+msgid "Mandatory Input: No valid IPv4 address or host given!"
+msgstr ""
+"Entrada obrigatória: Nenhum endereço IPv4 ou nome de equipamento válido foi "
+"fornecido!"
+
+msgid "Mandatory Input: No valid IPv6 address given!"
+msgstr "Entrada obrigatória: Nenhum endereço IPv6 válido foi informado!"
+
+msgid "Mandatory Input: No valid Port given!"
+msgstr "Entrada obrigatória: Nenhuma porta válida foi informada!"
+
+msgid "Maximum number of client connections that will be served."
+msgstr "O número máximo de conexões de cliente que será aceito."
+
+msgid "Maximum size (in KB) of the buffer for content filtering."
+msgstr "Tamanho máximo (em KB) do buffer para filtragem de conteúdo."
+
+msgid "Miscellaneous"
+msgstr "Diversos"
+
+msgid "NOT installed"
+msgstr "NÃO instalado"
+
+msgid "No trailing '/', please."
+msgstr "Sem '/' final, por favor."
+
+msgid "Non-fatal errors - *we highly recommended enabling this*"
+msgstr "Erros não fatais - *é altamente recomendado ativar isto*"
+
+msgid ""
+"Number of seconds after which a socket times out if no data is received."
+msgstr ""
+"Número de segundos após o qual uma conexão expira se nenhum dado for "
+"recebido."
+
+msgid ""
+"Number of seconds after which an open connection will no longer be reused."
+msgstr ""
+"Número de segundos após o qual uma conexão aberta deixará de ser reutilizada."
+
+msgid ""
+"Only when using 'external filters', Privoxy has to create temporary files."
+msgstr ""
+"Somente quando for usado os \"filtros externos\". O Privoxy tem que criar "
+"arquivos temporários."
+
+msgid "Please install current version !"
+msgstr "Por favor, instale a versão atual!"
+
+msgid "Please press [Read] button"
+msgstr "Por favor, pressione o botão [Ler]"
+
+msgid "Please read Privoxy manual for details!"
+msgstr "Por favor, leia o manual do Privoxy para mais detalhes!"
+
+msgid "Please update to the current version!"
+msgstr "Por favor, atualize para a versão atual!"
+
+msgid "Privoxy WEB proxy"
+msgstr "Privoxy Web Proxy"
+
+msgid ""
+"Privoxy can (and normally does) use a number of other files for additional "
+"configuration, help and logging. This section of the configuration file "
+"tells Privoxy where to find those other files."
+msgstr ""
+"Privoxy pode (e normalmente o faz) utilizar uma série de outros arquivos de "
+"configuração, ajuda e de registros. Esta seção do arquivo de configuração "
+"informa o Privoxy onde encontrar os outros arquivos."
+
+msgid ""
+"Privoxy is a non-caching web proxy with advanced filtering capabilities for "
+"enhancing privacy, modifying web page data and HTTP headers, controlling "
+"access, and removing ads and other obnoxious Internet junk."
+msgstr ""
+"Privoxy é um proxy web sem cache com capacidades avançadas de filtragem para "
+"aumentar a privacidade, modificar dados de páginas web e cabeçalhos HTTP, "
+"controlar o acesso e remover anúncios e outras porcarias detestável da "
+"Internet."
+
+msgid "Read / Reread log file"
+msgstr "Ler / Ler novamente o arquivo de registros (log)"
+
+msgid "Show I/O status"
+msgstr "Mostrar status de Entrada/Saída"
+
+msgid "Show each connection status"
+msgstr "Mostrar cada estado de conexão"
+
+msgid "Show header parsing"
+msgstr "Mostrar análise do cabeçalho"
+
+msgid "Software package '%s' is not installed."
+msgstr "O pacote de software '%s' não está instalado."
+
+msgid "Software package '%s' is outdated."
+msgstr "O pacote '%' está desatualizado."
+
+msgid "Start"
+msgstr "Iniciar"
+
+msgid "Start / Stop"
+msgstr "Iniciar / Parar"
+
+msgid "Start/Stop Privoxy WEB Proxy"
+msgstr "Inicia / Para o Privoxy Web Proxy"
+
+msgid "Startup banner and warnings."
+msgstr "Mensagens e avisos iniciais."
+
+msgid "Syntax:"
+msgstr "Sintaxe:"
+
+msgid "Syntax: Client header names delimited by spaces."
+msgstr "Sintaxe: nomes de cabeçalho do cliente delimitados por espaços."
+
+msgid "Syntax: target_pattern http_parent[:port]"
+msgstr "Sintaxe: padrão_alvo http_superior[:porta]"
+
+msgid "Syntax: target_pattern socks_proxy[:port] http_parent[:port]"
+msgstr "Sintaxe: padrão_alvo proxy_socks[:porta] http_superior[:porta]"
+
+msgid "System"
+msgstr "Sistema"
+
+msgid ""
+"The actions file(s) to use. Multiple actionsfile lines are permitted, and "
+"are in fact recommended!"
+msgstr ""
+"O(s) arquivo(s) ações a ser usado. Várias linhas no arquivo são permitidas, "
+"e são, de fato, recomendadas!"
+
+msgid ""
+"The address and TCP port on which Privoxy will listen for client requests."
+msgstr ""
+"O endereço e porta TCP em que Privoxy vai esperar por pedidos dos clientes."
+
+msgid ""
+"The compression level that is passed to the zlib library when compressing "
+"buffered content."
+msgstr ""
+"O nível de compressão que é passada para a biblioteca zlib ao comprimir o "
+"conteúdo em buffer."
+
+msgid ""
+"The directory where all logging takes place (i.e. where the logfile is "
+"located)."
+msgstr ""
+"O diretório onde todos os registros ocorrem (ex: onde o arquivo de log está "
+"localizado)."
+
+msgid "The directory where the other configuration files are located."
+msgstr "O diretório onde os outros arquivos de configuração estão localizados."
+
+msgid ""
+"The filter files contain content modification rules that use regular "
+"expressions."
+msgstr ""
+"Os arquivos de filtro contêm regras de modificação de conteúdo que usam "
+"expressões regulares."
+
+msgid "The hostname shown on the CGI pages."
+msgstr "O nome da máquina mostrado nas páginas de CGI."
+
+msgid "The log file to use. File name, relative to log directory."
+msgstr ""
+"O arquivo de registros a ser usado. O nome do arquivo, relativo ao diretório "
+"de log."
+
+msgid "The order in which client headers are sorted before forwarding them."
+msgstr ""
+"A ordem em que os cabeçalhos dos clientes são classificados antes de "
+"encaminhá-los."
+
+msgid ""
+"The status code Privoxy returns for pages blocked with +handle-as-empty-"
+"document."
+msgstr ""
+"O código de status Privoxy retorna para páginas bloqueadas com +handle-as-"
+"empty-document."
+
+msgid ""
+"The trust mechanism is an experimental feature for building white-lists and "
+"should be used with care."
+msgstr ""
+"O mecanismo de confiança é um recurso experimental para a construção de "
+"listas de destinos confiáveis e deve ser usado com cuidado."
+
+msgid ""
+"The value of this option only matters if the experimental trust mechanism "
+"has been activated."
+msgstr ""
+"O valor desta opção só importa se o mecanismo de confiança experimental foi "
+"ativado."
+
+msgid ""
+"This option is only there for debugging purposes. It will drastically reduce "
+"performance."
+msgstr ""
+"Esta opção só está lá para fins de depuração. Ele irá reduzir drasticamente "
+"o desempenho."
+
+msgid ""
+"This option will be removed in future releases as it has been obsoleted by "
+"the more general header taggers."
+msgstr ""
+"Esta opção será removida em versões futuras, uma vez que ficou obsoleta "
+"pelos marcadores de cabeçalho mais genéricos."
+
+msgid ""
+"This tab controls the security-relevant aspects of Privoxy's configuration."
+msgstr ""
+"Esta guia controla os aspectos da configuração do Privoxy relevantes para a "
+"segurança."
+
+msgid ""
+"Through which SOCKS proxy (and optionally to which parent HTTP proxy) "
+"specific requests should be routed."
+msgstr ""
+"Através de qual Proxy SOCKS (e, opcionalmente, para o qual proxy HTTP "
+"superior) pedidos específicos devem ser encaminhados."
+
+msgid "To which parent HTTP proxy specific requests should be routed."
+msgstr ""
+"Para qual proxy HTTP superior os pedidos específicos devem ser encaminhados."
+
+msgid "User customizations"
+msgstr "Personalizações do usuário"
+
+msgid "Value is not a number"
+msgstr "O valor não é um número"
+
+msgid "Value not between 0 and 300"
+msgstr "Valor não está entre 0 e 300"
+
+msgid "Value not between 0 and 9"
+msgstr "Valor não está entre 0 e 9"
+
+msgid "Value not between 1 and 4096"
+msgstr "Valor não entre 1 e 4096"
+
+msgid "Value not greater 0 or empty"
+msgstr "Valor não é maior que 0 ou vazio"
+
+msgid "Value range 1 to 4096, no entry defaults to 4096"
+msgstr "Faixa do valor de 1 até 4096. Se vazio, será 4096"
+
+msgid "Version"
+msgstr "Versão"
+
+msgid "Version Information"
+msgstr "Informação da Versão"
+
+msgid "Whether intercepted requests should be treated as valid."
+msgstr "Se as solicitações interceptados deve ser tratadas como válidas."
+
+msgid ""
+"Whether or not Privoxy recognizes special HTTP headers to change toggle "
+"state."
+msgstr ""
+"Se o Privoxy deve reconhecer cabeçalhos HTTP especiais para mudar de "
+"alternância do estado."
+
+msgid "Whether or not buffered content is compressed before delivery."
+msgstr "Se o conteúdo em buffer é comprimido antes da entrega."
+
+msgid ""
+"Whether or not outgoing connections that have been kept alive should be "
+"shared between different incoming connections."
+msgstr ""
+"Se as conexões de saída que foram mantidas vivas devem ser compartilhadas "
+"entre diferentes conexões de entrada."
+
+msgid "Whether or not pipelined requests should be served."
+msgstr "Se os pedidos de pipeline deve ser aceitos."
+
+msgid "Whether or not proxy authentication through Privoxy should work."
+msgstr "Se a autenticação de proxy através do Privoxy deve funcionar."
+
+msgid "Whether or not the web-based actions file editor may be used."
+msgstr "Se o editor de arquivos de ações baseadas na web deve ser utilizado."
+
+msgid "Whether or not the web-based toggle feature may be used."
+msgstr "Se deve ser usado o recurso de alternância baseado na web."
+
+msgid "Whether requests to Privoxy's CGI pages can be blocked or redirected."
+msgstr ""
+"Se as solicitações para páginas CGI do Privoxy podem ser bloqueadas ou "
+"redirecionadas."
+
+msgid ""
+"Whether the CGI interface should stay compatible with broken HTTP clients."
+msgstr ""
+"Se a interface CGI deve se manter compatível com clientes HTTP mal "
+"implementados."
+
+msgid "Whether to run only one server thread."
+msgstr "Se deseja executar o servidor como apenas uma thread."
+
+msgid "Who can access what."
+msgstr "Quem pode acessar o quê."
+
+msgid "installed"
+msgstr "instalado"
+
+msgid "or higher"
+msgstr "ou maior"
+
+msgid "required"
+msgstr "necessário"
index 778422b..efbad08 100644 (file)
@@ -57,7 +57,7 @@ msgid ""
 "proxies. Note that parent proxies can severely decrease your privacy level. "
 "Also specified here are SOCKS proxies."
 msgstr ""
-"在这里设置 HTTP 请求所经过的多重代理链。注意:父级代理可能严重降低的隐私安"
+"在这里设置 HTTP 请求所经过的多重代理链。注意:父级代理可能严重降低的隐私安"
 "全度。在这里还可以设置 SOCKS 代理。"
 
 msgid "Debug GIF de-animation"
@@ -130,8 +130,8 @@ msgid ""
 "be a good idea to let them know how to reach you, what you block and why you "
 "do that, your policies, etc."
 msgstr ""
-"如果除了你还有其他用户使用 Privoxy 连接,最好让他们知道如何联系你,你屏蔽什"
-"么,你为什么这样做,你的政策等等。"
+"如果除了您还有其他用户使用 Privoxy 连接,最好让他们知道如何联系您,您屏蔽什"
+"么,您为什么这样做,您的政策等等。"
 
 msgid "Invalid email address"
 msgstr "邮箱地址无效"
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 0a5cd62..db13826 100644 (file)
@@ -1,17 +1,20 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: LuCi Chinese Translation\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-03-25 22:10+0100\n"
-"PO-Revision-Date: 2014-06-22 14:33+0200\n"
-"Last-Translator: phantasm131 <phantasm131@gmail.com>\n"
-"Language-Team: QQ Group 75543259\n"
+"PO-Revision-Date: 2017-10-29 14:58+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Calculate overhead"
 msgstr "计算开销"
@@ -29,7 +32,7 @@ msgid "Destination host"
 msgstr "目的主机"
 
 msgid "Download speed (kbit/s)"
-msgstr "下载速度 (kbit/s)"
+msgstr "下载速度(kbit/s)"
 
 msgid "Enable"
 msgstr "开启"
@@ -53,7 +56,7 @@ msgid "QoS"
 msgstr "QoS"
 
 msgid "Quality of Service"
-msgstr "QOS服务"
+msgstr "服务质量(QoS)"
 
 msgid "Source host"
 msgstr "源主机"
@@ -62,12 +65,14 @@ msgid "Target"
 msgstr "目标"
 
 msgid "Upload speed (kbit/s)"
-msgstr "上传速度 (kbit/s)"
+msgstr "上传速度(kbit/s)"
 
 msgid ""
 "With <abbr title=\"Quality of Service\">QoS</abbr> you can prioritize "
 "network traffic selected by addresses, ports or services."
-msgstr "根据网络地址、端口或服务,给流量数据包排序。"
+msgstr ""
+"使用 <abbr title=\"Quality of Service\">QoS</abbr>,根据网络地址、端口或服"
+"务,为流量数据包排序。"
 
 msgid "all"
 msgstr "全部"
index a011e9c..1197e8a 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-21 10:36+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
+"Project-Id-Version: LuCi Chinese Translation\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-03-25 22:10+0100\n"
+"PO-Revision-Date: 2017-10-29 15:00+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Calculate overhead"
-msgstr "流量計算"
+msgstr "計算開銷"
 
 msgid "Classification Rules"
 msgstr "分類規則"
 
 msgid "Classification group"
-msgstr "分組"
+msgstr "分組"
 
 msgid "Comment"
-msgstr ""
+msgstr "註解"
 
 msgid "Destination host"
 msgstr "目的主機"
 
 msgid "Download speed (kbit/s)"
-msgstr "下載速度(kbit/s)"
+msgstr "下載速度(kbit/s)"
 
 msgid "Enable"
-msgstr "啓用"
+msgstr "開啟"
 
 msgid "Half-duplex"
 msgstr "半雙工"
 
 msgid "Interfaces"
-msgstr "面"
+msgstr "面"
 
 msgid "Number of bytes"
-msgstr "位元數"
+msgstr "位元數"
 
 msgid "Ports"
-msgstr "埠"
+msgstr "埠"
 
 msgid "Protocol"
-msgstr "協"
+msgstr "協"
 
 msgid "QoS"
-msgstr "先進先出頻寬管理"
+msgstr "QoS"
 
 msgid "Quality of Service"
-msgstr "連線品質服務"
+msgstr "服務品質(QoS)"
 
 msgid "Source host"
-msgstr "源主機"
+msgstr "源主機"
 
 msgid "Target"
-msgstr "目的地"
+msgstr "目"
 
 msgid "Upload speed (kbit/s)"
-msgstr "上傳速度(kbit/s)"
+msgstr "上傳速度(kbit/s)"
 
 msgid ""
 "With <abbr title=\"Quality of Service\">QoS</abbr> you can prioritize "
 "network traffic selected by addresses, ports or services."
 msgstr ""
-"有了 <abbr title=\"Quality of Service\">QoS</abbr> 你可以用位址、埠號或者服務"
-"來排優先權."
+"使用 <abbr title=\"Quality of Service\">QoS</abbr>,根據網路位址、埠或服務,"
+"為流量資料包排序。"
 
 msgid "all"
-msgstr "通用優先權"
+msgstr "全部"
 
 msgid "default"
-msgstr "預設"
+msgstr "預設"
 
 msgid "express"
-msgstr "高優先權"
+msgstr "高"
 
 msgid "low"
-msgstr "低優先權"
+msgstr "低"
 
 msgid "normal"
-msgstr "一般優先權"
+msgstr "普通"
 
 msgid "priority"
-msgstr "優先權"
+msgstr "最高"
 
 #~ msgid "Service"
 #~ msgstr "服務"
 
 #~ msgid "Downlink"
-#~ msgstr "ä¸\8bè¼\89"
+#~ msgstr "ä¸\8bè¡\8c"
 
 #~ msgid "Internet Connection"
-#~ msgstr "網際網路連線"
+#~ msgstr "Internet連線"
 
 #~ msgid "Uplink"
-#~ msgstr "上"
+#~ msgstr "上"
 
 #~ msgid "allf"
-#~ msgstr "獨一無二"
+#~ msgstr "全部"
 
 #~ msgid "qos_connbytes"
-#~ msgstr "QoS連線位元數"
+#~ msgstr "Qos連線位元組數"
diff --git a/applications/luci-app-radicale/po/pt-br/radicale.po b/applications/luci-app-radicale/po/pt-br/radicale.po
new file mode 100644 (file)
index 0000000..17417fa
--- /dev/null
@@ -0,0 +1,469 @@
+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 ""
+"'AUTO' selects the highest protocol version that client and server support."
+msgstr ""
+"'AUTO' seleciona a versão mais alto protocolo que o cliente e o servidor "
+"suportar."
+
+msgid ""
+"'Hostname:Port' or 'IPv4:Port' or '[IPv6]:Port' Radicale should listen on"
+msgstr ""
+"'NomeDoEquipamento:porta' ou 'IPv4:Porta' ou '[IPv6]:Porta' em que o "
+"Radicale deve escutar"
+
+msgid "AUTO"
+msgstr "AUTO"
+
+msgid "Access-Control-Allow-Headers"
+msgstr "Access-Control-Allow-Headers"
+
+msgid "Access-Control-Allow-Methods"
+msgstr "Access-Control-Allow-Methods"
+
+msgid "Access-Control-Allow-Origin"
+msgstr "Access-Control-Allow-Origin"
+
+msgid "Access-Control-Expose-Headers"
+msgstr "Access-Control-Expose-Headers"
+
+msgid "Additional HTTP headers"
+msgstr "Additional HTTP headers"
+
+msgid "Address:Port"
+msgstr "Endereço: Porta"
+
+#, fuzzy
+msgid "Authentication"
+msgstr "Autenticação"
+
+msgid ""
+"Authentication login is matched against the 'user' key, and collection's "
+"path is matched against the 'collection' key."
+msgstr ""
+"O nome do usuário na autenticação é comparado com a chave do 'user', e o "
+"caminho da coleção é comparado com a chave 'coleção'."
+
+msgid "Authentication method"
+msgstr "Método de autenticação"
+
+msgid "Authentication method to allow access to Radicale server."
+msgstr "Método de autenticação para permitir o acesso ao servidor Radicale."
+
+msgid "Auto-start"
+msgstr "Iniciar automaticamente"
+
+msgid "Boot delay"
+msgstr "Atraso na iniciação"
+
+msgid "CalDAV/CardDAV"
+msgstr "CalDAV/CardDAV"
+
+msgid ""
+"Calendars and address books are available for both local and remote access, "
+"possibly limited through authentication policies."
+msgstr ""
+"Agendas e contados estão disponíveis tanto para acesso local como remoto, "
+"possivelmente limitado através das políticas de autenticação."
+
+msgid "Certificate file"
+msgstr "Arquivo do certificado"
+
+msgid ""
+"Change here the encoding Radicale will use instead of 'UTF-8' for responses "
+"to the client and/or to store data inside collections."
+msgstr ""
+"Mude aqui a codificação que o Radicale usará em vez de 'UTF-8' para "
+"respostas a clientes ou para armazenar dados dentro das coleções."
+
+msgid "Ciphers"
+msgstr "Cifras"
+
+msgid "Console Log level"
+msgstr "Nível de detalhamento dos registros (log)"
+
+msgid "Control the access to data collections."
+msgstr "Controlar o acesso às coleções de dados."
+
+#, fuzzy
+msgid "Critical"
+msgstr "Crítico"
+
+msgid ""
+"Cross-origin resource sharing (CORS) is a mechanism that allows restricted "
+"resources (e.g. fonts, JavaScript, etc.) on a web page to be requested from "
+"another domain outside the domain from which the resource originated."
+msgstr ""
+"O compartilhamento de recursos de origem cruzada (CORS) é um mecanismo que "
+"permite que os recursos de acesso restrito (por exemplo, fontes, JavaScript, "
+"etc.) em uma página web ser solicitado de outro domínio fora do domínio a "
+"partir do qual o recurso foi originado."
+
+msgid "Custom"
+msgstr "Personalizadas"
+
+msgid "Database"
+msgstr "Banco de Dados"
+
+#, fuzzy
+msgid "Debug"
+msgstr "Depuração"
+
+msgid "Delay (in seconds) during system boot before Radicale start"
+msgstr ""
+"Atraso (em segundos) durante a inicialização do sistema antes do Radicale "
+"iniciar"
+
+#, fuzzy
+msgid "Directory"
+msgstr "Diretório"
+
+msgid "Directory not exists/found !"
+msgstr "O diretório não foi encontrado!"
+
+msgid "Directory required !"
+msgstr "O diretório é necessário!"
+
+msgid "Directory where the rotating log-files are stored"
+msgstr "O diretório onde os registros(log) rotativos são armazenados"
+
+msgid "During delay ifup-events are not monitored !"
+msgstr "Durante a espera, eventos ifup não serão monitorados!"
+
+msgid "Enable HTTPS"
+msgstr "Ativar HTTPS"
+
+msgid ""
+"Enable/Disable auto-start of Radicale on system start-up and interface events"
+msgstr ""
+"Ativar/Desativar iniciação automática do Radicale na iniciação do sistema e "
+"em eventos de interface"
+
+msgid "Encoding"
+msgstr "Codificação"
+
+msgid "Encoding for responding requests."
+msgstr "Codificação para responder pedidos."
+
+msgid "Encoding for storing local collections."
+msgstr "Codificação para armazenar coleções locais."
+
+msgid "Encryption method"
+msgstr "Método de criptografia"
+
+#, fuzzy
+msgid "Error"
+msgstr "Erro"
+
+msgid "File '%s' not found !"
+msgstr "Arquivo '%s' não encontrado!"
+
+msgid "File Log level"
+msgstr "Nível de detalhamento dos registos(log) em arquivos"
+
+msgid "File not found !"
+msgstr "Arquivo não encontrado!"
+
+msgid "File-system"
+msgstr "Sistema de arquivos"
+
+msgid ""
+"For example, for the 'user' key, '.+' means 'authenticated user' and '.*' "
+"means 'anybody' (including anonymous users)."
+msgstr ""
+"Por exemplo, para a chave 'user', '.+' Significa 'usuário autenticado' e '."
+"*' Significa 'qualquer um' (incluindo usuários anônimos)."
+
+msgid "Full access for Owner only"
+msgstr "Acesso completo somente para o proprietário"
+
+msgid "Full access for authenticated Users"
+msgstr "Acesso completo para usuários autenticados"
+
+msgid "Full access for everybody (including anonymous)"
+msgstr "Acesso completo para todos (incluindo anônimo)"
+
+msgid "Full path and file name of certificate"
+msgstr "Caminho completo e nome do arquivo do certificado"
+
+msgid "Full path and file name of private key"
+msgstr "Caminho e arquivo nome completo da chave privada"
+
+#, fuzzy
+msgid "Info"
+msgstr "Informações"
+
+msgid "Keep in mind to use the correct hashing algorithm !"
+msgstr "Fique atento para usar o algoritmo de resumo digital(hash) correto!"
+
+msgid "Leading or ending slashes are trimmed from collection's path."
+msgstr "Barras inicias e finais serão removidas do caminho da coleção."
+
+msgid "Log-backup Count"
+msgstr "Contagem Registro(log) de Backup"
+
+msgid "Log-file Viewer"
+msgstr "Visualizador de Arquivo de Registros(log)"
+
+msgid "Log-file directory"
+msgstr "Diretório do arquivo de registros(log)"
+
+msgid "Log-file size"
+msgstr "Tamanho do arquivo de registros(log)"
+
+#, fuzzy
+msgid "Logging"
+msgstr "Registrando os eventos"
+
+msgid "Logon message"
+msgstr "Mensagem de entrada"
+
+msgid "Maximum size of each rotation log-file."
+msgstr "Tamanho máximo para a rotação do arquivo de registros(log)"
+
+msgid "Message displayed in the client when a password is needed."
+msgstr "Mensagem exibida para o cliente quando uma senha é necessária."
+
+#, fuzzy
+msgid "NOT installed"
+msgstr "NÃO instalado"
+
+#, fuzzy
+msgid "None"
+msgstr "Nada"
+
+msgid "Number of backup files of log to create."
+msgstr "Número de backups dos arquivos de registros(log) a serem criados."
+
+msgid "OPTIONAL: See python's ssl module for available ciphers"
+msgstr ""
+"Opcional: veja o módulo SSL do python para conhecer as cifras disponíveis"
+
+msgid "One or more missing/invalid fields on tab"
+msgstr "Um ou campos inválidos/ausentes na aba"
+
+msgid "Owner allow write, authenticated users allow read"
+msgstr "O proprietário pode escrever, os usuários autenticados podem ler"
+
+msgid "Path/File required !"
+msgstr "O caminho/arquivo é necessário!"
+
+msgid ""
+"Place here the 'user:password' pairs for your users which should have access "
+"to Radicale."
+msgstr ""
+"Coloque aqui os pares 'usuário:senha' para os seus usuários que devem ter "
+"acesso a Radicale."
+
+msgid "Please install current version !"
+msgstr "Por favor, instale a versão atual!"
+
+msgid "Please press [Reload] button below to reread the file."
+msgstr "Por favor, pressione o botão [Recarregar] abaixo para reler o arquivo."
+
+msgid "Please update to current version !"
+msgstr "Por favor, atualize para a versão atual!"
+
+msgid "Port numbers below 1024 (Privileged ports) are not supported"
+msgstr "Os porta abaixo de 1024 (portas privilegiadas) não são suportadas"
+
+msgid "Private key file"
+msgstr "Arquivo da chave privada"
+
+msgid "Radicale CalDAV/CardDAV Server"
+msgstr "Radicale Servidor CalDAV/CardDAV"
+
+msgid "Radicale uses '/etc/radicale/rights' as regexp-based file."
+msgstr ""
+"Radicale usa o '/etc/radicale/rights' como arquivo baseado em expressão "
+"regular."
+
+msgid "Radicale uses '/etc/radicale/users' as htpasswd file."
+msgstr "Radicale usa o '/etc/radicale/users' como o arquivo htpasswd."
+
+msgid "Read only!"
+msgstr "Somente leitura!"
+
+msgid "RegExp file"
+msgstr "Arquivo de expressões regulares"
+
+msgid "Reload"
+msgstr "Recarregar"
+
+msgid "Response Encoding"
+msgstr "Codificação da Resposta"
+
+msgid "Rights"
+msgstr "Direitos"
+
+msgid "Rights are based on a regexp-based file"
+msgstr "Os direitos são baseados em um arquivo baseado em expressões regulares"
+
+msgid "Rights backend"
+msgstr "Serviço de Direitos"
+
+msgid "SHA-1"
+msgstr "SHA-1"
+
+msgid "SSL Protocol"
+msgstr "Protocolo SSL"
+
+#, fuzzy
+msgid "Save"
+msgstr "Salvar"
+
+msgid "Section names are only used for naming the rule."
+msgstr "Os nomes das seção são usados ​​apenas para nomear a regra."
+
+#, fuzzy
+msgid "Server"
+msgstr "Servidor"
+
+msgid "Setting this parameter to '0' will disable rotation of log-file."
+msgstr ""
+"Definindo este parâmetro para '0' irá desativar a rotação dos arquivos de "
+"registros(log)."
+
+msgid "Software package '%s' is not installed."
+msgstr "O pacote de software '%s' não está instalado."
+
+msgid "Software package '%s' is outdated."
+msgstr "O pacote '%' está desatualizado."
+
+#, fuzzy
+msgid "Software update required"
+msgstr "A atualização do software é necessária"
+
+#, fuzzy
+msgid "Start"
+msgstr "Iniciar"
+
+#, fuzzy
+msgid "Start / Stop"
+msgstr "Iniciar / Parar"
+
+msgid "Start/Stop Radicale server"
+msgstr "Iniciar/Parar o servidor Radicale"
+
+msgid "Storage"
+msgstr "Armazenamento"
+
+msgid "Storage Encoding"
+msgstr "Codificação do Armazenamento"
+
+msgid "Storage backend"
+msgstr "Serviço de armazenamento"
+
+msgid "Syslog Log level"
+msgstr "Nível de detalhamento do serviço de registro (syslog)"
+
+#, fuzzy
+msgid "System"
+msgstr "Sistema"
+
+msgid ""
+"The Radicale Project is a complete CalDAV (calendar) and CardDAV (contact) "
+"server solution."
+msgstr ""
+"O Projeto Radicale é uma solução completa de CalDAV (agenda) e CardDAV "
+"(contatos)."
+
+msgid ""
+"They can be viewed and edited by calendar and contact clients on mobile "
+"phones or computers."
+msgstr ""
+"Eles podem ser visualizados e editados pelos clientes de agenda e de "
+"contatos em telefones celulares ou computadores."
+
+msgid "To edit the file follow this link!"
+msgstr "Para editar o arquivo, siga este link!"
+
+msgid "To view latest log file follow this link!"
+msgstr ""
+"Para visualizar mais recente arquivo de registros(log), siga este link!"
+
+msgid "Value is not a number"
+msgstr "O valor não é um número"
+
+msgid "Value is not an Integer >= 0 !"
+msgstr "O valor não é um número natural (>=0)!"
+
+msgid "Value not between 0 and 300"
+msgstr "Valor não está entre 0 e 300"
+
+msgid "Value required ! Integer >= 0 !"
+msgstr "O valor é necessário! Número natural (>=0)!"
+
+#, fuzzy
+msgid "Version"
+msgstr "Versão"
+
+#, fuzzy
+msgid "Version Information"
+msgstr "Informação da Versão"
+
+msgid ""
+"WARNING: Only 'File-system' is documented and tested by Radicale development"
+msgstr ""
+"AVISO: Apenas 'Sistema de Arquivos está documentado e testado pelo "
+"desenvolvimento do Radicale"
+
+#, fuzzy
+msgid "Warning"
+msgstr "Alerta"
+
+msgid ""
+"You can also get groups from the user regex in the collection with {0}, {1}, "
+"etc."
+msgstr ""
+"Você também pode obter grupos a partir da expressão regular do usuário na "
+"coleção com {0}, {1} , etc."
+
+msgid ""
+"You can use Python's ConfigParser interpolation values %(login)s and "
+"%(path)s."
+msgstr ""
+"Você pode usar a interpolação de valores %(login)s e %(path)s do "
+"ConfigParser do Python."
+
+msgid "crypt"
+msgstr "cifrar"
+
+msgid "custom"
+msgstr "personalizado"
+
+msgid "htpasswd file"
+msgstr "arquivo htpasswd"
+
+#, fuzzy
+msgid "installed"
+msgstr "instalado"
+
+msgid "no valid path given!"
+msgstr "Nenhum caminho válido foi informado!"
+
+#, fuzzy
+msgid "or higher"
+msgstr "ou maior"
+
+msgid "plain"
+msgstr "plano"
+
+#, fuzzy
+msgid "required"
+msgstr "necessário"
+
+msgid "salted SHA-1"
+msgstr "SHA-1 com salto"
index f3dae7f..9cb3a31 100644 (file)
@@ -1,19 +1,22 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "POT-Creation-Date: \n"
-"PO-Revision-Date: 2014-07-13 16:23+0200\n"
-"Last-Translator: qiuchengxuan <qiuchengxuan@gmail.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
+"PO-Revision-Date: 2017-10-29 15:24+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "6to4 interface"
-msgstr "IPv6到IPv4的接口"
+msgstr "6to4 接口"
 
 msgid "Address"
 msgstr "地址"
@@ -25,77 +28,79 @@ msgid "Advanced"
 msgstr "进阶选项"
 
 msgid "Advertise Home Agent flag"
-msgstr "广æ\92­æ\9c¬å\9c°ä¸­ç»§标识"
+msgstr "宣å\91\8aæ\9c¬å\9c°ä»£ç\90\86标识"
 
 msgid "Advertise router address"
-msgstr "广æ\92­路由地址"
+msgstr "宣å\91\8a路由地址"
 
 msgid "Advertised Domain Suffixes"
-msgstr "å\8cºå\9f\9f广æ\92­后缀"
+msgstr "宣å\91\8aç\9a\84å\9f\9f后缀"
 
 msgid ""
 "Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface "
 "is used"
-msgstr "IPv6 Recursive DNS服务器(RDNSS)地址。若为空,则为当前IPv6地址"
+msgstr "宣告的 IPv6 RDNSS 地址。若为空,则为当前 IPv6 地址"
 
 msgid "Advertised IPv6 prefixes"
-msgstr "IPV6广播前缀群"
+msgstr "宣告的 IPv6 前缀群"
 
 msgid ""
 "Advertised IPv6 prefixes. If empty, the current interface prefix is used"
-msgstr "IPv6广播前缀群。如果为空,将使用当前接口的前缀"
+msgstr "宣告的 IPv6 前缀群。若为空,将使用当前接口的前缀"
 
 msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)"
-msgstr "广æ\92­ç§»å\8a¨IPv6æ\9c¬å\9c°ä»£ç\90\86å\8a\9fè\83½ï¼\88RFC3775"
+msgstr "宣å\91\8a移å\8a¨ IPv6 æ\9c¬å\9c°ä»£ç\90\86å\8a\9fè\83½ï¼\88RFC3775ï¼\89"
 
 msgid "Advertises Mobile Router registration capability (NEMO Basic)"
-msgstr "广æ\92­ç§»å\8a¨è·¯ç\94±å\99¨æ³¨å\86\8cå\8a\9fè\83½ï¼\88NEMO基本)"
+msgstr "宣å\91\8a移å\8a¨è·¯ç\94±å\99¨æ³¨å\86\8cå\8a\9fè\83½ï¼\88NEMO 基本)"
 
 msgid ""
 "Advertises assumed reachability time in milliseconds of neighbours in the RA "
 "if specified. 0 disables reachability advertisements"
-msgstr "路由器公告报文中宣告估算的邻居可达时间(毫秒)。0代表禁用可达性宣告。"
+msgstr "在 RA 中宣告估算的邻居可达时间(毫秒)。0 禁用可达性宣告"
 
 msgid ""
 "Advertises the default Hop Count value for outgoing unicast packets in the "
 "RA. 0 disables hopcount advertisements"
-msgstr "路由器公告报文中广播外发单播数据包的缺省跳数值。 0禁用广播跳数"
+msgstr "在 RA 中宣告外发单播数据包的默认跳数值。0 禁用跳数宣告"
 
 msgid "Advertises the default router preference"
-msgstr "å\8f\91å¸\83缺ç\9c\81路由设置"
+msgstr "宣å\91\8aé»\98认路由设置"
 
 msgid ""
 "Advertises the given link MTU in the RA if specified. 0 disables MTU "
 "advertisements"
-msgstr "路由器公告报文中宣告链路MTU。0代表禁用MTU宣告"
+msgstr "在 RA 中宣告给定的链路 MTU。0 禁用 MTU 宣告"
 
 msgid ""
 "Advertises the length of time in seconds that addresses generated from the "
 "prefix via stateless address autoconfiguration remain preferred."
 msgstr ""
+"宣告时间长度(秒),对通过无状态地址自动配置从前缀生成的地址,维持为首选地"
+"址。"
 
 msgid ""
 "Advertises the length of time in seconds that the prefix is valid for the "
 "purpose of on-link determination."
-msgstr ""
+msgstr "宣告前缀对 on-link 决定有效的时间长度(秒)。"
 
 msgid ""
 "Advertises the lifetime of the default router in seconds. 0 indicates that "
 "the node is no default router"
-msgstr "声æ\98\8eé»\98认路ç\94±å\99¨ç\9a\84ç\94\9få­\98æ\97¶é\97´ï¼\88å\8d\95ä½\8d为ç§\92ï¼\89ã\80\820代表结点没有默认路由"
+msgstr "宣å\91\8aé»\98认路ç\94±å\99¨ç\9a\84ç\94\9få­\98æ\97¶é\97´ï¼\88ç§\92ï¼\89ã\80\82代表结点没有默认路由"
 
 msgid ""
 "Advertises the time in seconds the router is offering Mobile IPv6 Home Agent "
 "services"
-msgstr ""
+msgstr "宣告路由器提供移动 IPv6 本地代理服务的时间(秒)"
 
 msgid ""
 "Advertises wait time in milliseconds between Neighbor Solicitation messages "
 "in the RA if specified. 0 disables retransmit advertisements"
-msgstr ""
+msgstr "宣告 RA 中邻居请求消息间的等待时间(毫秒)。0 禁用宣告重传"
 
 msgid "Advertising"
-msgstr ""
+msgstr "宣告"
 
 msgid "Autonomous"
 msgstr "自治的"
@@ -110,10 +115,10 @@ msgid "Current hop limit"
 msgstr "当前跳数限制"
 
 msgid "DNSSL"
-msgstr "DNS搜索列表"
+msgstr "DNSSL"
 
 msgid "DNSSL Configuration"
-msgstr "DNS搜索列表设置"
+msgstr "DNSSL 设置"
 
 msgid "Default lifetime"
 msgstr "默认生存时限"
@@ -125,10 +130,10 @@ msgid "Enable"
 msgstr "启用"
 
 msgid "Enable advertisements"
-msgstr "å\90¯ç\94¨å¹¿æ\92­"
+msgstr "å\90¯ç\94¨å®£å\91\8a"
 
 msgid "Enables router advertisements and solicitations"
-msgstr "æ¿\80活路ç\94±å¹¿æ\92­和请求"
+msgstr "æ¿\80活路ç\94±å®£å\91\8a和请求"
 
 msgid ""
 "Enables the additional stateful administered autoconfiguration protocol "
@@ -138,25 +143,25 @@ msgstr "使能附加的基于状态管理的自动配置协议(RFC2462)"
 msgid ""
 "Enables the autoconfiguration of additional, non address information "
 "(RFC2462)"
-msgstr "启用自动配置,不包括地址信息(RFC2462)"
+msgstr "启用自动配置,不包括地址信息(RFC2462)"
 
 msgid "General"
 msgstr "概况"
 
 msgid "Home Agent information"
-msgstr "æ\9c¬å\9c°ä¸­ç»§信息"
+msgstr "æ\9c¬å\9c°ä»£ç\90\86信息"
 
 msgid "Home Agent lifetime"
-msgstr "æ\9c¬å\9c°ä¸­ç»§有效期"
+msgstr "æ\9c¬å\9c°ä»£ç\90\86有效期"
 
 msgid "Home Agent preference"
-msgstr "æ\9c¬å\9c°ä¸­ç»§优先权"
+msgstr "æ\9c¬å\9c°ä»£ç\90\86优先权"
 
 msgid "Include Home Agent Information in the RA"
-msgstr "è·¯ç\94±å\99¨å\85¬å\91\8aæ\8a¥æ\96\87中å\8c\85å\90«æ\9c¬å\9c°ä¸­ç»§信息"
+msgstr "è·¯ç\94±å\99¨å\85¬å\91\8aæ\8a¥æ\96\87中å\8c\85å\90«æ\9c¬å\9c°ä»£ç\90\86信息"
 
 msgid "Include Mobile IPv6 Advertisement Interval option to RA"
-msgstr "路由器公告报文中包含移动IPV6广播间隔设置"
+msgstr "路由器公告报文中包含移动 IPv6 宣告间隔设置"
 
 msgid "Includes the link-layer address of the outgoing interface in the RA"
 msgstr "路由器公告报文中包含出接口的链路层地址"
@@ -164,12 +169,12 @@ msgstr "路由器公告报文中包含出接口的链路层地址"
 msgid ""
 "Indicates that the address of interface is sent instead of network prefix, "
 "as is required by Mobile IPv6"
-msgstr "表明使用接口的地址发送而非网络前缀,移动IPv6需要"
+msgstr "表明使用接口的地址发送而非网络前缀,移动 IPv6 需要"
 
 msgid ""
 "Indicates that the underlying link is not broadcast capable, prevents "
 "unsolicited advertisements from being sent"
-msgstr "表æ\98\8eæ½\9cå\9c¨ç\9a\84é\93¾è·¯å¹¶ä¸\8då\85·æ\9c\89广æ\92­能力,避免主动触发的宣告报文发出"
+msgstr "表æ\98\8eæ½\9cå\9c¨ç\9a\84é\93¾è·¯å¹¶ä¸\8då\85·æ\9c\89宣å\91\8a能力,避免主动触发的宣告报文发出"
 
 msgid ""
 "Indicates that this prefix can be used for autonomous address configuration "
@@ -178,7 +183,7 @@ msgstr "表明此前缀能够用于匿名地址配置(RFC4862)"
 
 msgid ""
 "Indicates that this prefix can be used for on-link determination (RFC4861)"
-msgstr "表明此前缀能够用于on-link决定(RFC481)"
+msgstr "表明此前缀能够用于 on-link 决定(RFC481)"
 
 msgid "Interface"
 msgstr "接口"
@@ -196,31 +201,31 @@ msgid "Lifetime"
 msgstr "有效期"
 
 msgid "Link MTU"
-msgstr "连接MTU"
+msgstr "连接 MTU"
 
 msgid "Managed flag"
-msgstr "M标识"
+msgstr "M 标识"
 
 msgid "Max. interval"
 msgstr "最大间隔"
 
 msgid "Maximum advertisement interval"
-msgstr "æ\9c\80大广æ\92­间隔"
+msgstr "æ\9c\80大宣å\91\8a间隔"
 
 msgid "Minimum advertisement delay"
-msgstr "æ\9c\80å°\8f广æ\92­延时"
+msgstr "æ\9c\80å°\8f宣å\91\8a延时"
 
 msgid "Minimum advertisement interval"
-msgstr "æ\9c\80å°\8f广æ\92­间隔"
+msgstr "æ\9c\80å°\8f宣å\91\8a间隔"
 
 msgid "Mobile IPv6"
-msgstr "移动IPV6"
+msgstr "移动 IPv6"
 
 msgid "Mobile IPv6 interval option"
-msgstr "移动IPV6间隔选项"
+msgstr "移动 IPv6 间隔选项"
 
 msgid "Mobile IPv6 router registration"
-msgstr "移动IPV6路由注册"
+msgstr "移动 IPv6 路由注册"
 
 msgid "Multicast"
 msgstr "组播传输"
@@ -232,7 +237,7 @@ msgid "On-link determination"
 msgstr "已连接的目标"
 
 msgid "Preference"
-msgstr "优先权"
+msgstr "首选项"
 
 msgid "Preferred lifetime"
 msgstr "期望的生存时间"
@@ -253,27 +258,28 @@ msgid "RDNSS Configuration"
 msgstr "邻居发现服务器设置"
 
 msgid "Radvd"
-msgstr ""
+msgstr "Radvd"
 
 msgid "Radvd - DNSSL"
-msgstr "RADVD-DNS搜索列表"
+msgstr "Radvd - DNSSL"
 
 msgid "Radvd - Interface %q"
-msgstr ""
+msgstr "Radvd - 接口 %q"
 
 msgid "Radvd - Prefix"
-msgstr "RADVD-前缀"
+msgstr "Radvd - 前缀"
 
 msgid "Radvd - RDNSS"
-msgstr "RADVD-邻居发现服务器"
+msgstr "Radvd - RDNSS"
 
 msgid "Radvd - Route"
-msgstr "RADVD-路由"
+msgstr "Radvd - 路由"
 
 msgid ""
 "Radvd is a router advertisement daemon for IPv6. It listens to router "
 "solicitations and sends router advertisements as described in RFC 4861."
-msgstr "RADVD是一个IPV6路由公告软件,按照RFC4861监听路由请求和发送路由公告。"
+msgstr ""
+"Radvd 是一个 IPv6 路由公告软件,按照 RFC4861 监听路由请求和发送路由公告。"
 
 msgid "Reachable time"
 msgstr "可达延时"
@@ -289,7 +295,7 @@ msgid "Route Configuration"
 msgstr "路由设置"
 
 msgid "Routes"
-msgstr ""
+msgstr "路由"
 
 msgid "Source link-layer address"
 msgstr "源链路层地址"
@@ -299,9 +305,11 @@ msgid ""
 "interfaces public IPv4 address is combined with 2002::/3 and the value of "
 "the prefix option"
 msgstr ""
+"指定从其导出 6to4 前缀的逻辑接口名称。接口的公共 IPv4 地址将与 2002::/3 及前"
+"缀选项的值相结合"
 
 msgid "Specifies the lifetime associated with the route in seconds."
-msgstr "设å®\9aè·¯ç\94±å\85³è\81\94ç\9a\84ç\94\9få­\98æ\97¶é\97´ï¼\8cå\8d\95ä½\8d为ç§\92"
+msgstr "设å®\9aè·¯ç\94±å\85³è\81\94ç\9a\84ç\94\9få­\98æ\97¶é\97´ï¼\88ç§\92ï¼\89"
 
 msgid "Specifies the logical interface name this section belongs to"
 msgstr "说明这个物理接口连接到哪个网络"
@@ -309,12 +317,12 @@ msgstr "说明这个物理接口连接到哪个网络"
 msgid ""
 "Specifies the maximum duration how long the DNSSL entries are used for name "
 "resolution."
-msgstr "设定DNSSL表项名称解析的最长时间间隔"
+msgstr "设定 DNSSL 表项名称解析的最长时间间隔"
 
 msgid ""
 "Specifies the maximum duration how long the RDNSS entries are used for name "
 "resolution."
-msgstr "设定RDNSS表项名称解析的最长时间间隔"
+msgstr "设定 RDNSS 表项名称解析的最长时间间隔"
 
 msgid "Specifies the preference associated with the default router"
 msgstr "设定关联的默认路由的配置"
@@ -325,23 +333,23 @@ msgstr "后缀"
 msgid ""
 "The maximum time allowed between sending unsolicited multicast router "
 "advertisements from the interface, in seconds"
-msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80大æ\97¶é\97´é\97´é\9a\94ï¼\8cå\8d\95ä½\8d为ç§\92"
+msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80大æ\97¶é\97´é\97´é\9a\94ï¼\88ç§\92ï¼\89"
 
 msgid ""
 "The minimum time allowed between sending multicast router advertisements "
 "from the interface, in seconds"
-msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80å°\8fæ\97¶é\97´é\97´é\9a\94ï¼\8cå\8d\95ä½\8d为ç§\92"
+msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80å°\8fæ\97¶é\97´é\97´é\9a\94ï¼\88ç§\92ï¼\89"
 
 msgid ""
 "The minimum time allowed between sending unsolicited multicast router "
 "advertisements from the interface, in seconds"
-msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81主å\8a¨è§¦å\8f\91ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80å°\8fæ\97¶é\97´é\97´é\9a\94ï¼\8cå\8d\95ä½\8d为ç§\92"
+msgstr "å\85\81许æ\8e¥å\8f£å\8f\91é\80\81主å\8a¨è§¦å\8f\91ç»\84æ\92­è·¯ç\94±å®£å\91\8aæ\8a¥æ\96\87ç\9a\84æ\9c\80å°\8fæ\97¶é\97´é\97´é\9a\94ï¼\88ç§\92ï¼\89"
 
 msgid "The preference for the Home Agent sending this RA"
-msgstr ""
+msgstr "发送此 RA 的本地代理的首选项"
 
 msgid "Timing"
-msgstr ""
+msgstr "计时"
 
 msgid "Unicast only"
 msgstr "单播"
@@ -362,7 +370,7 @@ msgid "low"
 msgstr "低"
 
 msgid "medium"
-msgstr "中"
+msgstr "中"
 
 msgid "no"
 msgstr "否"
index aed76c5..6de8309 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 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"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2017-10-29 15:24+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Language: zh_TW\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: Gtranslator 2.91.7\n"
 
 msgid "6to4 interface"
-msgstr ""
+msgstr "6to4 介面"
 
 msgid "Address"
-msgstr ""
+msgstr "位址"
 
 msgid "Addresses"
-msgstr ""
+msgstr "位址"
 
 msgid "Advanced"
-msgstr ""
+msgstr "進階選項"
 
 msgid "Advertise Home Agent flag"
-msgstr ""
+msgstr "宣告本地代理標識"
 
 msgid "Advertise router address"
-msgstr ""
+msgstr "宣告路由位址"
 
 msgid "Advertised Domain Suffixes"
-msgstr ""
+msgstr "宣告的域字尾"
 
 msgid ""
 "Advertised IPv6 RDNSS. If empty, the current IPv6 address of the interface "
 "is used"
-msgstr ""
+msgstr "宣告的 IPv6 RDNSS 位址。若為空,則為當前 IPv6 位址"
 
 msgid "Advertised IPv6 prefixes"
-msgstr ""
+msgstr "宣告的 IPv6 字首群"
 
 msgid ""
 "Advertised IPv6 prefixes. If empty, the current interface prefix is used"
-msgstr ""
+msgstr "宣告的 IPv6 字首群。若為空,將使用當前介面的字首"
 
 msgid "Advertises Mobile IPv6 Home Agent capability (RFC3775)"
-msgstr ""
+msgstr "宣告移動 IPv6 本地代理功能(RFC3775)"
 
 msgid "Advertises Mobile Router registration capability (NEMO Basic)"
-msgstr ""
+msgstr "宣告移動路由器註冊功能(NEMO 基本)"
 
 msgid ""
 "Advertises assumed reachability time in milliseconds of neighbours in the RA "
 "if specified. 0 disables reachability advertisements"
-msgstr ""
+msgstr "在 RA 中宣告估算的鄰居可達時間(毫秒)。0 禁用可達性宣告"
 
 msgid ""
 "Advertises the default Hop Count value for outgoing unicast packets in the "
 "RA. 0 disables hopcount advertisements"
-msgstr ""
+msgstr "在 RA 中宣告外發單播資料包的預設跳數值。0 禁用跳數宣告"
 
 msgid "Advertises the default router preference"
-msgstr ""
+msgstr "宣告預設路由設定"
 
 msgid ""
 "Advertises the given link MTU in the RA if specified. 0 disables MTU "
 "advertisements"
-msgstr ""
+msgstr "在 RA 中宣告給定的鏈路 MTU。0 禁用 MTU 宣告"
 
 msgid ""
 "Advertises the length of time in seconds that addresses generated from the "
 "prefix via stateless address autoconfiguration remain preferred."
 msgstr ""
+"宣告時間長度(秒),對通過無狀態位址自動配置從字首生成的位址,維持為首選地"
+"址。"
 
 msgid ""
 "Advertises the length of time in seconds that the prefix is valid for the "
 "purpose of on-link determination."
-msgstr ""
+msgstr "宣告字首對 on-link 決定有效的時間長度(秒)。"
 
 msgid ""
 "Advertises the lifetime of the default router in seconds. 0 indicates that "
 "the node is no default router"
-msgstr ""
+msgstr "宣告預設路由器的生存時間(秒)。0 代表結點沒有預設路由"
 
 msgid ""
 "Advertises the time in seconds the router is offering Mobile IPv6 Home Agent "
 "services"
-msgstr ""
+msgstr "宣告路由器提供移動 IPv6 本地代理服務的時間(秒)"
 
 msgid ""
 "Advertises wait time in milliseconds between Neighbor Solicitation messages "
 "in the RA if specified. 0 disables retransmit advertisements"
-msgstr ""
+msgstr "宣告 RA 中鄰居請求訊息間的等待時間(毫秒)。0 禁用宣告重傳"
 
 msgid "Advertising"
-msgstr ""
+msgstr "宣告"
 
 msgid "Autonomous"
-msgstr ""
+msgstr "自治的"
 
 msgid "Clients"
-msgstr ""
+msgstr "客戶端"
 
 msgid "Configuration flag"
-msgstr ""
+msgstr "設定標識"
 
 msgid "Current hop limit"
-msgstr ""
+msgstr "當前跳數限制"
 
 msgid "DNSSL"
-msgstr ""
+msgstr "DNSSL"
 
 msgid "DNSSL Configuration"
-msgstr ""
+msgstr "DNSSL 設定"
 
 msgid "Default lifetime"
-msgstr ""
+msgstr "預設生存時限"
 
 msgid "Default preference"
-msgstr ""
+msgstr "預設優先順序"
 
 msgid "Enable"
-msgstr ""
+msgstr "啟用"
 
 msgid "Enable advertisements"
-msgstr ""
+msgstr "啟用宣告"
 
 msgid "Enables router advertisements and solicitations"
-msgstr ""
+msgstr "啟用路由宣告和請求"
 
 msgid ""
 "Enables the additional stateful administered autoconfiguration protocol "
 "(RFC2462)"
-msgstr ""
+msgstr "使能附加的基於狀態管理的自動配置協議(RFC2462)"
 
 msgid ""
 "Enables the autoconfiguration of additional, non address information "
 "(RFC2462)"
-msgstr ""
+msgstr "啟用自動配置,不包括位址資訊(RFC2462)"
 
 msgid "General"
-msgstr ""
+msgstr "概況"
 
 msgid "Home Agent information"
-msgstr ""
+msgstr "本地代理資訊"
 
 msgid "Home Agent lifetime"
-msgstr ""
+msgstr "本地代理有效期"
 
 msgid "Home Agent preference"
-msgstr ""
+msgstr "本地代理優先權"
 
 msgid "Include Home Agent Information in the RA"
-msgstr ""
+msgstr "路由器公告報文中包含本地代理資訊"
 
 msgid "Include Mobile IPv6 Advertisement Interval option to RA"
-msgstr ""
+msgstr "路由器公告報文中包含移動 IPv6 宣告間隔設定"
 
 msgid "Includes the link-layer address of the outgoing interface in the RA"
-msgstr ""
+msgstr "路由器公告報文中包含出介面的鏈路層位址"
 
 msgid ""
 "Indicates that the address of interface is sent instead of network prefix, "
 "as is required by Mobile IPv6"
-msgstr ""
+msgstr "表明使用介面的位址傳送而非網路字首,移動 IPv6 需要"
 
 msgid ""
 "Indicates that the underlying link is not broadcast capable, prevents "
 "unsolicited advertisements from being sent"
-msgstr ""
+msgstr "表明潛在的鏈路並不具有宣告能力,避免主動觸發的宣告報文發出"
 
 msgid ""
 "Indicates that this prefix can be used for autonomous address configuration "
 "(RFC4862)"
-msgstr ""
+msgstr "表明此字首能夠用於匿名位址配置(RFC4862)"
 
 msgid ""
 "Indicates that this prefix can be used for on-link determination (RFC4861)"
-msgstr ""
+msgstr "表明此字首能夠用於 on-link 決定(RFC481)"
 
 msgid "Interface"
-msgstr ""
+msgstr "介面"
 
 msgid "Interface Configuration"
-msgstr ""
+msgstr "介面設定"
 
 msgid "Interface required"
-msgstr ""
+msgstr "介面必要項"
 
 msgid "Interfaces"
-msgstr ""
+msgstr "介面"
 
 msgid "Lifetime"
-msgstr ""
+msgstr "有效期"
 
 msgid "Link MTU"
-msgstr ""
+msgstr "連線 MTU"
 
 msgid "Managed flag"
-msgstr ""
+msgstr "M 標識"
 
 msgid "Max. interval"
-msgstr ""
+msgstr "最大間隔"
 
 msgid "Maximum advertisement interval"
-msgstr ""
+msgstr "最大宣告間隔"
 
 msgid "Minimum advertisement delay"
-msgstr ""
+msgstr "最小宣告延時"
 
 msgid "Minimum advertisement interval"
-msgstr ""
+msgstr "最小宣告間隔"
 
 msgid "Mobile IPv6"
-msgstr ""
+msgstr "移動 IPv6"
 
 msgid "Mobile IPv6 interval option"
-msgstr ""
+msgstr "移動 IPv6 間隔選項"
 
 msgid "Mobile IPv6 router registration"
-msgstr ""
+msgstr "移動 IPv6 路由註冊"
 
 msgid "Multicast"
-msgstr ""
+msgstr "組播傳輸"
 
 msgid "On-link"
-msgstr ""
+msgstr "已連線的"
 
 msgid "On-link determination"
-msgstr ""
+msgstr "已連線的目標"
 
 msgid "Preference"
-msgstr ""
+msgstr "首選項"
 
 msgid "Preferred lifetime"
-msgstr ""
+msgstr "期望的生存時間"
 
 msgid "Prefix"
-msgstr ""
+msgstr "字首"
 
 msgid "Prefix Configuration"
-msgstr ""
+msgstr "字首設定"
 
 msgid "Prefixes"
-msgstr ""
+msgstr "字首群"
 
 msgid "RDNSS"
-msgstr ""
+msgstr "鄰居發現伺服器"
 
 msgid "RDNSS Configuration"
-msgstr ""
+msgstr "鄰居發現伺服器設定"
 
 msgid "Radvd"
-msgstr ""
+msgstr "Radvd"
 
 msgid "Radvd - DNSSL"
-msgstr ""
+msgstr "Radvd - DNSSL"
 
 msgid "Radvd - Interface %q"
-msgstr ""
+msgstr "Radvd - 介面 %q"
 
 msgid "Radvd - Prefix"
-msgstr ""
+msgstr "Radvd - 字首"
 
 msgid "Radvd - RDNSS"
-msgstr ""
+msgstr "Radvd - RDNSS"
 
 msgid "Radvd - Route"
-msgstr ""
+msgstr "Radvd - 路由"
 
 msgid ""
 "Radvd is a router advertisement daemon for IPv6. It listens to router "
 "solicitations and sends router advertisements as described in RFC 4861."
 msgstr ""
+"Radvd 是一個 IPv6 路由公告軟體,按照 RFC4861 監聽路由請求和傳送路由公告。"
 
 msgid "Reachable time"
-msgstr ""
+msgstr "可達延時"
 
 msgid ""
 "Restrict communication to specified clients, leave empty to use multicast"
-msgstr ""
+msgstr "限制特定會話,留空則使用組播"
 
 msgid "Retransmit timer"
-msgstr ""
+msgstr "中繼轉發計時器"
 
 msgid "Route Configuration"
-msgstr ""
+msgstr "路由設定"
 
 msgid "Routes"
-msgstr ""
+msgstr "路由"
 
 msgid "Source link-layer address"
-msgstr ""
+msgstr "源鏈路層位址"
 
 msgid ""
 "Specifies a logical interface name to derive a 6to4 prefix from. The "
 "interfaces public IPv4 address is combined with 2002::/3 and the value of "
 "the prefix option"
 msgstr ""
+"指定從其匯出 6to4 字首的邏輯介面名稱。介面的公共 IPv4 位址將與 2002::/3 及前"
+"綴選項的值相結合"
 
 msgid "Specifies the lifetime associated with the route in seconds."
-msgstr ""
+msgstr "設定路由關聯的生存時間(秒)"
 
 msgid "Specifies the logical interface name this section belongs to"
-msgstr ""
+msgstr "說明這個物理介面連線到哪個網路"
 
 msgid ""
 "Specifies the maximum duration how long the DNSSL entries are used for name "
 "resolution."
-msgstr ""
+msgstr "設定 DNSSL 表項名稱解析的最長時間間隔"
 
 msgid ""
 "Specifies the maximum duration how long the RDNSS entries are used for name "
 "resolution."
-msgstr ""
+msgstr "設定 RDNSS 表項名稱解析的最長時間間隔"
 
 msgid "Specifies the preference associated with the default router"
-msgstr ""
+msgstr "設定關聯的預設路由的配置"
 
 msgid "Suffix"
-msgstr ""
+msgstr "字尾"
 
 msgid ""
 "The maximum time allowed between sending unsolicited multicast router "
 "advertisements from the interface, in seconds"
-msgstr ""
+msgstr "允許介面傳送組播路由宣告報文的最大時間間隔(秒)"
 
 msgid ""
 "The minimum time allowed between sending multicast router advertisements "
 "from the interface, in seconds"
-msgstr ""
+msgstr "允許介面傳送組播路由宣告報文的最小時間間隔(秒)"
 
 msgid ""
 "The minimum time allowed between sending unsolicited multicast router "
 "advertisements from the interface, in seconds"
-msgstr ""
+msgstr "允許介面傳送主動觸發組播路由宣告報文的最小時間間隔(秒)"
 
 msgid "The preference for the Home Agent sending this RA"
-msgstr ""
+msgstr "傳送此 RA 的本地代理的首選項"
 
 msgid "Timing"
-msgstr ""
+msgstr "計時"
 
 msgid "Unicast only"
-msgstr ""
+msgstr "單播"
 
 msgid "Valid lifetime"
-msgstr ""
+msgstr "有效的生存時間"
 
 msgid "Validity time"
-msgstr ""
+msgstr "有效期"
 
 msgid "default"
-msgstr ""
+msgstr "預設"
 
 msgid "high"
-msgstr ""
+msgstr ""
 
 msgid "low"
-msgstr ""
+msgstr ""
 
 msgid "medium"
-msgstr ""
+msgstr ""
 
 msgid "no"
-msgstr ""
+msgstr ""
 
 msgid "yes"
-msgstr ""
+msgstr "是"
+
+#~ msgid "Advertised IPv6 prefix"
+#~ msgstr "IPV6廣播字首"
+
+#~ msgid ""
+#~ "Advertised IPv6 prefix. If empty, the current interface prefix is used"
+#~ msgstr "IPV6廣播字首。若為空,則當前介面字首已被使用。"
+
+#~ msgid "Open"
+#~ msgstr "開啟"
+
+#~ msgid ""
+#~ "Specifies the maximum duration how long the DNSSL entries are used for "
+#~ "name resolution. Use 0 to specify an infinite lifetime"
+#~ msgstr "指定DNSSL解析域名的最長時間,0則為無限長"
+
+#~ msgid ""
+#~ "Specifies the maximum duration how long the RDNSS entries are used for "
+#~ "name resolution. Use 0 to specify an infinite lifetime"
+#~ msgstr "指定RDNSS解析域名的最長時間,0則為無限長"
index 721191a..2e533c3 100644 (file)
@@ -13,9 +13,10 @@ s:tab("template", translate("Edit Template"))
 s:taboption("general", Value, "name", translate("Hostname"))
 s:taboption("general", Value, "description", translate("Description"))
 s:taboption("general", Value, "workgroup", translate("Workgroup"))
-s:taboption("general", Value, "homes", translate("Share home-directories"),
+h = s:taboption("general", Flag, "homes", translate("Share home-directories"),
         translate("Allow system users to reach their home directories via " ..
                 "network shares"))
+h.rmempty = false
 
 tmpl = s:taboption("template", Value, "_tmpl",
        translate("Edit the template that is used for generating the samba configuration."), 
@@ -35,7 +36,8 @@ function tmpl.write(self, section, value)
 end
 
 
-s = m:section(TypedSection, "sambashare", translate("Shared Directories"))
+s = m:section(TypedSection, "sambashare", translate("Shared Directories")
+  , translate("Please add directories to share. Each directory refers to a folder on a mounted device."))
 s.anonymous = true
 s.addremove = true
 s.template = "cbi/tblsection"
@@ -53,6 +55,12 @@ ro.rmempty = false
 ro.enabled = "yes"
 ro.disabled = "no"
 
+br = s:option(Flag, "browseable", translate("Browseable"))
+br.rmempty = false
+br.default = "yes"
+br.enabled = "yes"
+br.disabled = "no"
+
 go = s:option(Flag, "guest_ok", translate("Allow guests"))
 go.rmempty = false
 go.enabled = "yes"
index 0668b1b..eb6be15 100644 (file)
@@ -26,6 +26,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Usuaris permesos"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Crea màscara"
 
@@ -62,6 +65,11 @@ msgstr "Comparticions de xarxa"
 msgid "Path"
 msgstr "Ruta"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Només lectura"
 
index fefb7ff..d66d876 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Povolení uživatelé"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Vytvořit masku"
 
@@ -60,6 +63,11 @@ msgstr "Síťová sdílení"
 msgid "Path"
 msgstr "Cesta"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Pouze pro čtení"
 
index a5ceb05..4e8da53 100644 (file)
@@ -24,6 +24,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Legitimierte Benutzer"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Berechtigungsmaske für neue Dateien"
 
@@ -62,6 +65,11 @@ msgstr "Netzwerkfreigaben"
 msgid "Path"
 msgstr "Pfad"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Nur Lesen"
 
index 7cc722d..878416a 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -58,6 +61,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index f524c14..642580e 100644 (file)
@@ -22,6 +22,9 @@ msgstr "Allow system users to reach their home directories via network shares"
 msgid "Allowed users"
 msgstr "Allowed users"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Create mask"
 
@@ -58,6 +61,11 @@ msgstr "Network Shares"
 msgid "Path"
 msgstr "Path"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Read-only"
 
index 950a817..57c4b86 100644 (file)
@@ -24,6 +24,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Usuarios permitidos"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Crear máscara"
 
@@ -60,6 +63,11 @@ msgstr "Comparticiones de red"
 msgid "Path"
 msgstr "Dirección"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Solo lectura"
 
index 8877900..63960fc 100644 (file)
@@ -24,6 +24,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Utilisateurs autorisés"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Maque de création"
 
@@ -60,6 +63,11 @@ msgstr "Partages réseau"
 msgid "Path"
 msgstr "Chemin"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Lecture seule"
 
index dd21a4a..010d2b2 100644 (file)
@@ -17,6 +17,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -53,6 +56,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index 64d1e22..0263edb 100644 (file)
@@ -22,6 +22,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Engedélyezett felhasználók"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Létrehozási maszk"
 
@@ -60,6 +63,11 @@ msgstr "Hálózati megosztások"
 msgid "Path"
 msgstr "Elérési út"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Csak olvasható"
 
index 4645782..8725902 100644 (file)
@@ -3,8 +3,8 @@ msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2012-04-19 22:28+0200\n"
-"Last-Translator: claudyus <claudyus84@gmail.com>\n"
+"PO-Revision-Date: 2017-09-06 01:28+0200\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -24,8 +24,11 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Utenti ammessi"
 
+msgid "Browseable"
+msgstr "Sfogliabile"
+
 msgid "Create mask"
-msgstr "Mask di creazione dei file"
+msgstr "Crea maschera"
 
 msgid "Description"
 msgstr "Descrizione"
@@ -61,6 +64,13 @@ msgstr "Condivisioni di rete"
 msgid "Path"
 msgstr "Percorso"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+"Per favore aggiungi le directory da condividere. Ogni directory si riferisce a una "
+"cartella su un dispositivo montato."
+
 msgid "Read-only"
 msgstr "Solo lettura"
 
index c527507..eca10ef 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-05-19 19:36+0200\n"
-"PO-Revision-Date: 2011-11-03 18:09+0200\n"
-"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-08-16 00:41+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language: ja\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.4\n"
+"X-Generator: Poedit 2.0.3\n"
+"Language-Team: \n"
 
 msgid "Allow guests"
 msgstr "ゲストアクセスを許可"
@@ -22,6 +22,9 @@ msgstr "sambaを介してユーザーのホームディレクトリへのアク
 msgid "Allowed users"
 msgstr "許可されたユーザー"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "マスクの作成"
 
@@ -58,6 +61,13 @@ msgstr "ネットワーク共有"
 msgid "Path"
 msgstr "パス"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+"共有するディレクトリを追加してください。マウントされたデバイス等のディレクト"
+"リを設定し、公開することができます。"
+
 msgid "Read-only"
 msgstr "読み込みのみ"
 
index e29133e..d5f1ce1 100644 (file)
@@ -16,6 +16,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -52,6 +55,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index 1c5c807..349f6b9 100644 (file)
@@ -13,6 +13,9 @@ msgstr "Tillat systembrukere å nå sine hjemmekataloger via nettverks mapper."
 msgid "Allowed users"
 msgstr "Tillatte brukere"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Opprett Maske"
 
@@ -49,6 +52,11 @@ msgstr "Nettverks Mapper"
 msgid "Path"
 msgstr "Fysisk bane"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Skrivebeskyttet"
 
index 7482622..d997268 100644 (file)
@@ -23,6 +23,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Użytkownicy z prawem dostępu"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Utwórz maskę"
 
@@ -59,6 +62,11 @@ msgstr "Udziały sieciowe"
 msgid "Path"
 msgstr "Ścieżka"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Tylko do odczytu"
 
index a753152..a2e6e22 100644 (file)
@@ -24,6 +24,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Usuários permitidos"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Máscara de criação"
 
@@ -60,6 +63,11 @@ msgstr "Compartilhamentos de Rede"
 msgid "Path"
 msgstr "Caminho"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Somente leitura"
 
index 4c5a2cd..f58b588 100644 (file)
@@ -24,6 +24,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Utilizadores Permitidos"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Criar Máscara"
 
@@ -60,6 +63,11 @@ msgstr "Partilhas da Rede"
 msgid "Path"
 msgstr "Caminho"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Apenas Leitura"
 
index 4bc3415..7cfcda7 100644 (file)
@@ -23,6 +23,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Utilizatori acceptati"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Creaza masca"
 
@@ -59,6 +62,11 @@ msgstr "Partajari pe retea"
 msgid "Path"
 msgstr "Cale"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Doar citire"
 
index 82906e3..534770f 100644 (file)
@@ -25,6 +25,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Разрешённые пользователи"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Создать маску"
 
@@ -61,6 +64,11 @@ msgstr "Сетевые ресурсы"
 msgid "Path"
 msgstr "Путь"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Только для чтения"
 
index 66ec9e0..21f102d 100644 (file)
@@ -17,6 +17,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -53,6 +56,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index b83dec5..f58f8b8 100644 (file)
@@ -18,6 +18,9 @@ msgstr "Tillåt systemanvändare att nå deras hem-mappar via nätverksdelningar
 msgid "Allowed users"
 msgstr "Tillåtna användare"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Skapa mask"
 
@@ -55,6 +58,11 @@ msgstr "Nätverksdelningar"
 msgid "Path"
 msgstr "Genväg"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Endast läsbar"
 
index d91400b..674ed33 100644 (file)
@@ -10,6 +10,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -46,6 +49,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index fda2f6e..98d47be 100644 (file)
@@ -17,6 +17,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr ""
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr ""
 
@@ -53,6 +56,11 @@ msgstr ""
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr ""
 
index 6f2a920..a4469f9 100644 (file)
@@ -23,6 +23,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Дозволені користувачі"
 
+msgid "Browseable"
+msgstr ""
+
 msgid "Create mask"
 msgstr "Створити маску"
 
@@ -60,6 +63,11 @@ msgstr "Загальні мережеві ресурси"
 msgid "Path"
 msgstr "Шлях"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 msgid "Read-only"
 msgstr "Тільки читання"
 
index 4e5638d..7c088ce 100644 (file)
@@ -28,6 +28,9 @@ msgstr ""
 msgid "Allowed users"
 msgstr "Người sử dụng được cho phép"
 
+msgid "Browseable"
+msgstr ""
+
 #, fuzzy
 msgid "Create mask"
 msgstr "Tạo Mask"
@@ -66,6 +69,11 @@ msgstr "Mạng chia sẻ"
 msgid "Path"
 msgstr ""
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr ""
+
 #, fuzzy
 msgid "Read-only"
 msgstr "Chỉ đọc "
index 4ff671b..ea9d048 100644 (file)
@@ -1,41 +1,47 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2012-06-21 18:31+0200\n"
-"Last-Translator: phantasm131 <phantasm131@gmail.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
+"PO-Revision-Date: 2017-10-29 15:36+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Allow guests"
 msgstr "允许匿名用户"
 
 msgid "Allow system users to reach their home directories via network shares"
-msgstr "允许系统用户通过网络共享访问他们的目录"
+msgstr "允许系统用户通过网络共享访问他们的目录"
 
 msgid "Allowed users"
 msgstr "允许用户"
 
+msgid "Browseable"
+msgstr "可浏览"
+
 msgid "Create mask"
-msgstr "创建权限"
+msgstr "创建权限掩码"
 
 msgid "Description"
 msgstr "描述"
 
 msgid "Directory mask"
-msgstr "目录权限"
+msgstr "目录权限掩码"
 
 msgid "Edit Template"
 msgstr "编辑模板"
 
 msgid "Edit the template that is used for generating the samba configuration."
-msgstr "编辑用来生成samba设置的模板"
+msgstr "编辑用来生成 samba 设置的模板"
 
 msgid "General Settings"
 msgstr "基本设置"
@@ -44,10 +50,10 @@ msgid "Hostname"
 msgstr "主机名"
 
 msgid "Mask for new directories"
-msgstr "新目录权限"
+msgstr "新目录权限掩码"
 
 msgid "Mask for new files"
-msgstr "新文件权限"
+msgstr "新文件权限掩码"
 
 msgid "Name"
 msgstr "共享名"
@@ -58,11 +64,16 @@ msgstr "网络共享"
 msgid "Path"
 msgstr "目录"
 
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr "请添加要共享的目录。每个目录指到已挂载设备上的文件夹。"
+
 msgid "Read-only"
 msgstr "只读"
 
 msgid "Share home-directories"
-msgstr "共享目录"
+msgstr "共享目录"
 
 msgid "Shared Directories"
 msgstr "共享目录"
@@ -73,8 +84,8 @@ msgid ""
 "('|') should not be changed. They get their values from the 'General "
 "Settings' tab."
 msgstr ""
-"创建samba设置的 \"/etc/samba/smb.conf.template\" 文件的内容。被通道符|包围的"
-"值可在基本设置中进行配置"
+"这是将从其上生成 samba 配置的文件“/etc/samba/smb.conf.template”的内容。由管道"
+"符(“|”)包围的值不应更改。它们将从“常规设置”标签中获取其值。"
 
 msgid "Workgroup"
 msgstr "工作组"
index 6ec99ee..8461a60 100644 (file)
@@ -1,76 +1,94 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2013-08-07 15:43+0200\n"
-"Last-Translator: Ethan <ethan42411@gmail.com>\n"
-"Language-Team: none\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2017-10-29 15:36+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Allow guests"
 msgstr "允許匿名使用者"
 
 msgid "Allow system users to reach their home directories via network shares"
-msgstr "å\85\81許系統使ç\94¨è\80\85é\80\8fé\81\8e網路å\88\86享家目錄"
+msgstr "å\85\81許系統使ç\94¨è\80\85é\80\9aé\81\8e網路å\85±äº«è¨ªå\95\8fä»\96å\80\91ç\9a\84家目錄"
 
 msgid "Allowed users"
 msgstr "允許使用者"
 
+msgid "Browseable"
+msgstr "可瀏覽"
+
 msgid "Create mask"
-msgstr "建立權限"
+msgstr "建立權限掩碼"
 
 msgid "Description"
 msgstr "描述"
 
 msgid "Directory mask"
-msgstr "目錄權限"
+msgstr "目錄權限掩碼"
 
 msgid "Edit Template"
-msgstr "編輯樣ç\89\88"
+msgstr "編輯模æ\9d¿"
 
 msgid "Edit the template that is used for generating the samba configuration."
-msgstr "編輯ç\94¨ä¾\86ç\94¢ç\94\9fSamba設å®\9aç\9a\84樣板"
+msgstr "編輯ç\94¨ä¾\86ç\94\9fæ\88\90 samba è¨­å®\9aç\9a\84模板"
 
 msgid "General Settings"
 msgstr "基本設定"
 
 msgid "Hostname"
-msgstr "主機名"
+msgstr "主機名"
 
 msgid "Mask for new directories"
-msgstr "新目錄權限"
+msgstr "新目錄權限掩碼"
 
 msgid "Mask for new files"
-msgstr "新檔案權限"
+msgstr "新檔案權限掩碼"
 
 msgid "Name"
-msgstr "共用名稱"
+msgstr "共享名"
 
 msgid "Network Shares"
-msgstr "網路å\88\86享"
+msgstr "網路å\85±享"
 
 msgid "Path"
-msgstr "路徑"
+msgstr "目錄"
+
+msgid ""
+"Please add directories to share. Each directory refers to a folder on a "
+"mounted device."
+msgstr "請新增要共享的目錄。每個目錄指到已掛載裝置上的資料夾。"
 
 msgid "Read-only"
-msgstr "å\94¯讀"
+msgstr "å\8fª讀"
 
 msgid "Share home-directories"
-msgstr "å\88\86享家目錄"
+msgstr "å\85±享家目錄"
 
 msgid "Shared Directories"
-msgstr "å\88\86享目錄"
+msgstr "å\85±享目錄"
 
 msgid ""
 "This is the content of the file '/etc/samba/smb.conf.template' from which "
 "your samba configuration will be generated. Values enclosed by pipe symbols "
 "('|') should not be changed. They get their values from the 'General "
 "Settings' tab."
-msgstr "建立Samba設定的 \"/etc/samba/smb.conf.template\" 檔案內容。被('|')包圍的值可以在基本設定中進行設定"
+msgstr ""
+"這是將從其上生成 samba 配置的檔案“/etc/samba/smb.conf.template”的內容。由管道"
+"符(“|”)包圍的值不應更改。它們將從“常規設定”標籤中獲取其值。"
 
 msgid "Workgroup"
-msgstr "工作群組"
+msgstr "工作組"
+
+#~ msgid "Physical Path"
+#~ msgstr "物理路徑"
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..22f3106
--- /dev/null
@@ -0,0 +1,53 @@
+-- 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")
+ss.options_common(s, "advanced")
+
+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"
+       elseif stype == "ss_redir" then
+               o = s:taboption("advanced", Flag, "disable_sni",
+                       translate("Disable SNI"),
+                       translate("Disable parsing HTTP/HTTPS payload to find then resolve hostname at remote server"))
+       end
+end
+
+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..4a01bed
--- /dev/null
@@ -0,0 +1,109 @@
+-- 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 src ip addresses checked \
+               against <em>Src ip/net bypass</em>, <em>Src ip/net forward</em>, \
+               <em>Src ip/net 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 dst addresses checked."))
+
+local sdata = m:get('ss_rules')
+if not sdata then
+       m:set('ss_rules', nil, 'ss_rules')
+       m:set('ss_rules', 'disabled', "1")
+end
+
+function src_dst_option(s, ...)
+       local o = s:taboption(...)
+       o.datatype = "or(ip4addr,cidr4)"
+end
+
+s = m:section(NamedSection, "ss_rules", "ss_rules")
+s:tab("general", translate("General Settings"))
+s:tab("src", translate("Source Settings"))
+s:tab("dst", 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 TCP packets"))
+ss.values_actions(o)
+o = s:taboption('general', DynamicList, "ifnames",
+       translate("Ingress interfaces"),
+       translate("Only apply rules on packets from these network interfaces"))
+ss.values_ifnames(o)
+s:taboption('general', Value, "ipt_args",
+       translate("Extra arguments"),
+       translate("Passes additional arguments to iptables. Use with care!"))
+
+src_dst_option(s, 'src', DynamicList, "src_ips_bypass",
+       translate("Src ip/net bypass"),
+       translate("Bypass ss-redir for packets with src address in this list"))
+src_dst_option(s, 'src', DynamicList, "src_ips_forward",
+       translate("Src ip/net forward"),
+       translate("Forward through ss-redir for packets with src address in this list"))
+src_dst_option(s, 'src', DynamicList, "src_ips_checkdst",
+       translate("Src ip/net checkdst"),
+       translate("Continue to have dst address checked for packets with src address in this list"))
+o = s:taboption('src', ListValue, "src_default",
+       translate("Src default"),
+       translate("Default action for packets whose src address do not match any of the src ip/net list"))
+ss.values_actions(o)
+
+src_dst_option(s, 'dst', DynamicList, "dst_ips_bypass",
+       translate("Dst ip/net bypass"),
+       translate("Bypass ss-redir for packets with dst address in this list"))
+src_dst_option(s, 'dst', DynamicList, "dst_ips_forward",
+       translate("Dst ip/net forward"),
+       translate("Forward through ss-redir for packets with dst address in this list"))
+
+o = s:taboption('dst', FileBrowser, "dst_ips_bypass_file",
+       translate("Dst ip/net bypass file"),
+       translate("File containing ip/net for the purposes as with <em>Dst ip/net bypass</em>"))
+o.datatype = "file"
+s:taboption('dst', FileBrowser, "dst_ips_forward_file",
+       translate("Dst ip/net forward file"),
+       translate("File containing ip/net for the purposes as with <em>Dst ip/net forward</em>"))
+o.datatype = "file"
+o = s:taboption('dst', ListValue, "dst_default",
+       translate("Dst default"),
+       translate("Default action for packets whose dst address do not match any of the dst ip list"))
+ss.values_actions(o)
+
+local installed = os.execute("iptables -m recent -h &>/dev/null") == 0
+if installed then
+       o = s:taboption('dst', Flag, "dst_forward_recentrst")
+else
+       m:set('ss_rules', 'dst_forward_recentrst', "0")
+       o = s:taboption("dst", Button, "_install")
+       o.inputtitle = translate("Install package iptables-mod-conntrack-extra")
+       o.inputstyle = "apply"
+       o.write = function()
+               return luci.http.redirect(
+                       luci.dispatcher.build_url("admin/system/packages") ..
+                       "?submit=1&install=iptables-mod-conntrack-extra"
+               )
+       end
+end
+o.title = translate("Forward recentrst")
+o.description = translate("Forward those packets whose dst have recently sent to us multiple tcp-rst")
+
+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..7ba6b40
--- /dev/null
@@ -0,0 +1,264 @@
+-- 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 sys = require("luci.sys")
+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)
+       o:value("bypass")
+       o:value("forward")
+       if o.option ~= "dst_default" then
+               o:value("checkdst")
+       end
+end
+
+function values_redir(o, xmode)
+       o.map.uci.foreach("shadowsocks-libev", "ss_redir", function(sdata)
+               local disabled = ucival_to_bool(sdata["disabled"])
+               local sname = sdata[".name"]
+               local mode = sdata["mode"] or "tcp_only"
+               if not disabled and mode:find(xmode) then
+                       local desc = "%s - %s" % {sname, mode}
+                       o:value(sname, desc)
+               end
+       end)
+       o:value("", "<unset>")
+       o.default = ""
+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)
+       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 values_ifnames(o)
+       for _, v in ipairs(sys.net.devices()) do
+               o:value(v)
+       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, "ipv6_first", translate("IPv6 First"), translate("Prefer IPv6 addresses when resolving names"))
+       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"})
+               elseif stype == "ss_redir" then
+                       cfgvalue_overview_(sdata, lines, {"disable_sni"})
+               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
+                       if n == "key" or n == "password" then
+                               v = translate("<hidden>")
+                       end
+                       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",
+       "ipv6_first",
+       "fast_open",
+       "reuse_port",
+       "mode",
+       "mtu",
+       "timeout",
+       "user",
+}
+
+modes = {
+       "tcp_only",
+       "tcp_and_udp",
+       "udp_only",
+}
+
+methods = {
+       -- aead
+       "aes-128-gcm",
+       "aes-192-gcm",
+       "aes-256-gcm",
+       "chacha20-ietf-poly1305",
+       "xchacha20-ietf-poly1305",
+       -- 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",
+}
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/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 ""
diff --git a/applications/luci-app-shairplay/po/pt-br/shairplay.po b/applications/luci-app-shairplay/po/pt-br/shairplay.po
new file mode 100644 (file)
index 0000000..c7d0ab1
--- /dev/null
@@ -0,0 +1,54 @@
+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"
+"X-Poedit-Bookmarks: -1,5,-1,-1,-1,-1,-1,-1,-1,-1\n"
+
+msgid "AO Device ID"
+msgstr "Identificador do dispositivo AO"
+
+msgid "AO Device Name"
+msgstr "Nome do dispositivo AO"
+
+msgid "AO Driver"
+msgstr "Driver do AO"
+
+msgid "Airport Name"
+msgstr "Nome do Airport"
+
+msgid "Default"
+msgstr "Padrão"
+
+msgid "Enabled"
+msgstr "Habilitado"
+
+msgid "HW Address"
+msgstr "Endereço de Hardware"
+
+msgid "Password"
+msgstr "Senha"
+
+msgid "Port"
+msgstr "Porta"
+
+msgid "Respawn"
+msgstr "Redisparar"
+
+msgid "Shairplay"
+msgstr "Shairplay"
+
+msgid ""
+"Shairplay is a simple AirPlay server implementation, here you can configure "
+"the settings."
+msgstr ""
+"Shairplay é uma implementação simples de um servidor AirPlay. Aqui você pode "
+"configurá-lo."
diff --git a/applications/luci-app-simple-adblock/Makefile b/applications/luci-app-simple-adblock/Makefile
new file mode 100644 (file)
index 0000000..d7be685
--- /dev/null
@@ -0,0 +1,16 @@
+# 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:=Simple Adblock Web UI
+LUCI_DEPENDS:=+simple-adblock
+LUCI_PKGARCH:=all
+PKG_RELEASE:=2
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-simple-adblock/luasrc/controller/simpleadblock.lua b/applications/luci-app-simple-adblock/luasrc/controller/simpleadblock.lua
new file mode 100644 (file)
index 0000000..46125b3
--- /dev/null
@@ -0,0 +1,7 @@
+module("luci.controller.simpleadblock", package.seeall)
+function index()
+       if not nixio.fs.access("/etc/config/simple-adblock") then
+               return
+       end
+       entry({"admin", "services", "simpleadblock"}, cbi("simpleadblock"), _("Simple AdBlock"))
+end
diff --git a/applications/luci-app-simple-adblock/luasrc/model/cbi/simpleadblock.lua b/applications/luci-app-simple-adblock/luasrc/model/cbi/simpleadblock.lua
new file mode 100644 (file)
index 0000000..214f298
--- /dev/null
@@ -0,0 +1,79 @@
+m = Map("simple-adblock", translate("Simple AdBlock Settings"))
+s = m:section(NamedSection, "config", "simple-adblock")
+
+-- General options
+e = s:option(Flag, "enabled", translate("Enable/start service"))
+e.rmempty  = false
+
+function e.cfgvalue(self, section)
+       return self.map:get(section, "enabled") == "1" and luci.sys.init.enabled("simple-adblock") and self.enabled or self.disabled
+end
+
+function e.write(self, section, value)
+       if value == "1" then
+               luci.sys.call("/etc/init.d/simple-adblock enable >/dev/null")
+               luci.sys.call("/etc/init.d/simple-adblock start >/dev/null")
+       else
+               luci.sys.call("/etc/init.d/simple-adblock stop >/dev/null")
+       end
+       return Flag.write(self, section, value)
+end
+
+o2 = s:option(ListValue, "verbosity", translate("Output Verbosity Setting"),translate("Controls system log and console output verbosity"))
+o2:value("0", translate("Suppress output"))
+o2:value("1", translate("Some output"))
+o2:value("2", translate("Verbose output"))
+o2.rmempty = false
+o2.default = 2
+
+o3 = s:option(ListValue, "force_dns", translate("Force Router DNS"), translate("Forces Router DNS use on local devices, also known as DNS Hijacking"))
+o3:value("0", translate("Let local devices use their own DNS servers if set"))
+o3:value("1", translate("Force Router DNS server to all local devices"))
+o3.rmempty = false
+o3.default = 1
+
+
+local sysfs_path = "/sys/class/leds/"
+local leds = {}
+if nixio.fs.access(sysfs_path) then
+       leds = nixio.util.consume((nixio.fs.dir(sysfs_path)))
+end
+if #leds ~= 0 then
+       o3 = s:option(Value, "led", translate("LED to indicate status"), translate("Pick the LED not already used in ")
+               .. [[<a href="]] .. luci.dispatcher.build_url("admin/system/leds") .. [[">]]
+               .. translate("System LED Configuration") .. [[</a>]])
+       o3.rmempty = true
+       o3:value("", translate("none"))
+       for k, v in ipairs(leds) do
+               o3:value(v)
+       end
+end
+
+
+s2 = m:section(NamedSection, "config", "simple-adblock")
+-- Whitelisted Domains
+d1 = s2:option(DynamicList, "whitelist_domain", translate("Whitelisted Domains"), translate("Individual domains to be whitelisted"))
+d1.addremove = false
+d1.optional = false
+
+-- Blacklisted Domains
+d3 = s2:option(DynamicList, "blacklist_domain", translate("Blacklisted Domains"), translate("Individual domains to be blacklisted"))
+d3.addremove = false
+d3.optional = false
+
+-- Whitelisted Domains URLs
+d2 = s2:option(DynamicList, "whitelist_domains_url", translate("Whitelisted Domain URLs"), translate("URLs to lists of domains to be whitelisted"))
+d2.addremove = false
+d2.optional = false
+
+-- Blacklisted Domains URLs
+d4 = s2:option(DynamicList, "blacklist_domains_url", translate("Blacklisted Domain URLs"), translate("URLs to lists of domains to be blacklisted"))
+d4.addremove = false
+d4.optional = false
+
+-- Blacklisted Hosts URLs
+d5 = s2:option(DynamicList, "blacklist_hosts_url", translate("Blacklisted Hosts URLs"), translate("URLs to lists of hosts to be blacklisted"))
+d5.addremove = false
+d5.optional = false
+
+return m
diff --git a/applications/luci-app-simple-adblock/po/ja/simple-adblock.po b/applications/luci-app-simple-adblock/po/ja/simple-adblock.po
new file mode 100644 (file)
index 0000000..7926595
--- /dev/null
@@ -0,0 +1,93 @@
+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.12\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: ja\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "ドメイン ブラックリストのURL"
+
+msgid "Blacklisted Domains"
+msgstr "ブラックリスト ドメイン"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "hosts ブラックリストのURL"
+
+msgid "Controls system log and console output verbosity"
+msgstr "システム ログとコンソール出力の冗長性を設定します。"
+
+msgid "Enable/start service"
+msgstr "サービスの有効化/開始"
+
+msgid "Force Router DNS"
+msgstr "ルーターDNSの強制"
+
+msgid "Force Router DNS server to all local devices"
+msgstr "全ローカル デバイスにルーター DNSサーバーの使用を強制"
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+"ローカル デバイスに対し、ルーター上のDNSサーバーの使用を強制します。これは、"
+"DNS ハイジャックとしても知られています。"
+
+msgid "Individual domains to be blacklisted"
+msgstr "ブラックリストに登録する、個々のドメインです。"
+
+msgid "Individual domains to be whitelisted"
+msgstr "ホワイトリストに登録する、個々のドメインです。"
+
+msgid "LED to indicate status"
+msgstr "ステータスを表示するLED"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr "DNSサーバーの使用を強制しない"
+
+msgid "Output Verbosity Setting"
+msgstr "出力詳細度の設定"
+
+msgid "Pick the LED not already used in"
+msgstr "右の設定で既に使用されていないLEDを選択します:"
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Simple AdBlock 設定"
+
+msgid "Some output"
+msgstr "軽量出力"
+
+msgid "Suppress output"
+msgstr "出力の抑制"
+
+msgid "System LED Configuration"
+msgstr "LED 設定"
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr "ブラックリストに登録するドメインのリストのURLです。"
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr "ホワイトリストに登録するドメインのリストのURLです。"
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr "ブラックリストに登録するドメインが列挙された、hostsファイルのURLです。"
+
+msgid "Verbose output"
+msgstr "詳細出力"
+
+msgid "Whitelisted Domain URLs"
+msgstr "ドメイン ホワイトリストのURL"
+
+msgid "Whitelisted Domains"
+msgstr "ホワイトリスト ドメイン"
+
+msgid "none"
+msgstr "なし"
diff --git a/applications/luci-app-simple-adblock/po/pt-br/simple-adblock.po b/applications/luci-app-simple-adblock/po/pt-br/simple-adblock.po
new file mode 100644 (file)
index 0000000..6dbbf8b
--- /dev/null
@@ -0,0 +1,86 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "Endereço com lista de Domínio para a Lista Negra"
+
+msgid "Blacklisted Domains"
+msgstr "Domínios para a Lista Negra"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "Endereços de Hosts para a Lista Negra"
+
+msgid "Controls system log and console output verbosity"
+msgstr ""
+"Controla o sistema de registro e o detalhamento das mensagens de saída do "
+"console"
+
+msgid "Enable/start service"
+msgstr "Habilitar/Iniciar o serviço"
+
+msgid "Force Router DNS"
+msgstr "Forçar o DNS do Roteador"
+
+msgid "Force Router DNS server to all local devices"
+msgstr "Forçar o servidor de DNS do Roteador para todos os dispositivos locais"
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+"Forçar o uso do DNS do Roteador nos dispositivos locais, também conhecido "
+"como redirecionamento de DNS"
+
+msgid "Individual domains to be blacklisted"
+msgstr "Domínios individuais para serem incluídos na Lista Negra"
+
+msgid "Individual domains to be whitelisted"
+msgstr "Domínios individuais para serem incluídos na Lista Branca"
+
+msgid "LED to indicate status"
+msgstr "LED para indicar o estado"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+"Deixe que os dispositivos locais usem seus próprios servidores de DNS, se "
+"definidos"
+
+msgid "Output Verbosity Setting"
+msgstr "Definição do detalhamento do registro"
+
+msgid "Pick the LED not already used in"
+msgstr "Escolha um LED não usando em"
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Configuração do Simple AdBlock"
+
+msgid "Some output"
+msgstr "Pouco detalhado"
+
+msgid "Suppress output"
+msgstr "Suprimir"
+
+msgid "System LED Configuration"
+msgstr "Configuração do LED"
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr "Endereço da lista dos domínios para a Lista Negra"
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr "Endereço da lista dos domínios para a Lista Branca"
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr "Endereço da lista dos hosts para a Lista Negra"
+
+msgid "Verbose output"
+msgstr "Detalhado"
+
+msgid "Whitelisted Domain URLs"
+msgstr "Endereço com lista de domínio para a Lista Branca"
+
+msgid "Whitelisted Domains"
+msgstr "Domínios para a Lista Branca"
+
+msgid "none"
+msgstr "Nenhum"
diff --git a/applications/luci-app-simple-adblock/po/pt/simple-adblock.po b/applications/luci-app-simple-adblock/po/pt/simple-adblock.po
new file mode 100644 (file)
index 0000000..6dbbf8b
--- /dev/null
@@ -0,0 +1,86 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "Endereço com lista de Domínio para a Lista Negra"
+
+msgid "Blacklisted Domains"
+msgstr "Domínios para a Lista Negra"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "Endereços de Hosts para a Lista Negra"
+
+msgid "Controls system log and console output verbosity"
+msgstr ""
+"Controla o sistema de registro e o detalhamento das mensagens de saída do "
+"console"
+
+msgid "Enable/start service"
+msgstr "Habilitar/Iniciar o serviço"
+
+msgid "Force Router DNS"
+msgstr "Forçar o DNS do Roteador"
+
+msgid "Force Router DNS server to all local devices"
+msgstr "Forçar o servidor de DNS do Roteador para todos os dispositivos locais"
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+"Forçar o uso do DNS do Roteador nos dispositivos locais, também conhecido "
+"como redirecionamento de DNS"
+
+msgid "Individual domains to be blacklisted"
+msgstr "Domínios individuais para serem incluídos na Lista Negra"
+
+msgid "Individual domains to be whitelisted"
+msgstr "Domínios individuais para serem incluídos na Lista Branca"
+
+msgid "LED to indicate status"
+msgstr "LED para indicar o estado"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+"Deixe que os dispositivos locais usem seus próprios servidores de DNS, se "
+"definidos"
+
+msgid "Output Verbosity Setting"
+msgstr "Definição do detalhamento do registro"
+
+msgid "Pick the LED not already used in"
+msgstr "Escolha um LED não usando em"
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Configuração do Simple AdBlock"
+
+msgid "Some output"
+msgstr "Pouco detalhado"
+
+msgid "Suppress output"
+msgstr "Suprimir"
+
+msgid "System LED Configuration"
+msgstr "Configuração do LED"
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr "Endereço da lista dos domínios para a Lista Negra"
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr "Endereço da lista dos domínios para a Lista Branca"
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr "Endereço da lista dos hosts para a Lista Negra"
+
+msgid "Verbose output"
+msgstr "Detalhado"
+
+msgid "Whitelisted Domain URLs"
+msgstr "Endereço com lista de domínio para a Lista Branca"
+
+msgid "Whitelisted Domains"
+msgstr "Domínios para a Lista Branca"
+
+msgid "none"
+msgstr "Nenhum"
diff --git a/applications/luci-app-simple-adblock/po/sv/simple-adblock.po b/applications/luci-app-simple-adblock/po/sv/simple-adblock.po
new file mode 100644 (file)
index 0000000..e95f95f
--- /dev/null
@@ -0,0 +1,80 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Blacklisted Domain URLs"
+msgstr "Svartlistade domänadresser"
+
+msgid "Blacklisted Domains"
+msgstr "Svartlistade domäner"
+
+msgid "Blacklisted Hosts URLs"
+msgstr "Svartlistade värdadresser"
+
+msgid "Controls system log and console output verbosity"
+msgstr "Kontrollerar systemloggar och detaljnivån för konsoll-utmatningen"
+
+msgid "Enable/start service"
+msgstr "Aktivera/starta tjänsten"
+
+msgid "Force Router DNS"
+msgstr ""
+
+msgid "Force Router DNS server to all local devices"
+msgstr ""
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+
+msgid "Individual domains to be blacklisted"
+msgstr "Individuella domäner som ska svartlistas"
+
+msgid "Individual domains to be whitelisted"
+msgstr "Individulla domäner som ska svartlistas"
+
+msgid "LED to indicate status"
+msgstr "LED för att indikera status"
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+
+msgid "Output Verbosity Setting"
+msgstr ""
+
+msgid "Pick the LED not already used in"
+msgstr ""
+
+msgid "Simple AdBlock"
+msgstr "Simple AdBlock"
+
+msgid "Simple AdBlock Settings"
+msgstr "Inställningar för Simple AdBlock"
+
+msgid "Some output"
+msgstr "Viss utmatning"
+
+msgid "Suppress output"
+msgstr "Förträng utmatning"
+
+msgid "System LED Configuration"
+msgstr ""
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr ""
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr ""
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr ""
+
+msgid "Verbose output"
+msgstr "Utförlig utmatning"
+
+msgid "Whitelisted Domain URLs"
+msgstr "Vitlistade domänadresser"
+
+msgid "Whitelisted Domains"
+msgstr "Vitlistade domäner"
+
+msgid "none"
+msgstr "ingen"
diff --git a/applications/luci-app-simple-adblock/po/templates/simple-adblock.pot b/applications/luci-app-simple-adblock/po/templates/simple-adblock.pot
new file mode 100644 (file)
index 0000000..4cfff96
--- /dev/null
@@ -0,0 +1,80 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Blacklisted Domain URLs"
+msgstr ""
+
+msgid "Blacklisted Domains"
+msgstr ""
+
+msgid "Blacklisted Hosts URLs"
+msgstr ""
+
+msgid "Controls system log and console output verbosity"
+msgstr ""
+
+msgid "Enable/start service"
+msgstr ""
+
+msgid "Force Router DNS"
+msgstr ""
+
+msgid "Force Router DNS server to all local devices"
+msgstr ""
+
+msgid "Forces Router DNS use on local devices, also known as DNS Hijacking"
+msgstr ""
+
+msgid "Individual domains to be blacklisted"
+msgstr ""
+
+msgid "Individual domains to be whitelisted"
+msgstr ""
+
+msgid "LED to indicate status"
+msgstr ""
+
+msgid "Let local devices use their own DNS servers if set"
+msgstr ""
+
+msgid "Output Verbosity Setting"
+msgstr ""
+
+msgid "Pick the LED not already used in"
+msgstr ""
+
+msgid "Simple AdBlock"
+msgstr ""
+
+msgid "Simple AdBlock Settings"
+msgstr ""
+
+msgid "Some output"
+msgstr ""
+
+msgid "Suppress output"
+msgstr ""
+
+msgid "System LED Configuration"
+msgstr ""
+
+msgid "URLs to lists of domains to be blacklisted"
+msgstr ""
+
+msgid "URLs to lists of domains to be whitelisted"
+msgstr ""
+
+msgid "URLs to lists of hosts to be blacklisted"
+msgstr ""
+
+msgid "Verbose output"
+msgstr ""
+
+msgid "Whitelisted Domain URLs"
+msgstr ""
+
+msgid "Whitelisted Domains"
+msgstr ""
+
+msgid "none"
+msgstr ""
diff --git a/applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock b/applications/luci-app-simple-adblock/root/etc/uci-defaults/40_luci-simple-adblock
new file mode 100644 (file)
index 0000000..3b7137e
--- /dev/null
@@ -0,0 +1,10 @@
+#!/bin/sh
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@simple-adblock[-1]
+       add ucitrack simple-adblock
+       set ucitrack.@simple-adblock[-1].init=simple-adblock
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
index 055c67b..a5ebcb7 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -45,6 +45,8 @@ msgstr ""
 msgid ""
 "Become an active member of this community and help by operating your own node"
 msgstr ""
+"Bli en aktiv medlem av det här sällskapet och hjälp till genom att "
+"tillhandahålla en egen nod"
 
 msgid "Blacklist"
 msgstr "Svartlista"
index 439b774..4ad7404 100644 (file)
@@ -51,7 +51,7 @@ msgstr ""
 # Something wwrong?
 msgid ""
 "Become an active member of this community and help by operating your own node"
-msgstr "成为这个社区的一个活跃成员并且运营自己的节点以帮助别人。"
+msgstr "成为这个社区的一个活跃成员并且运营自己的节点以帮助别人。"
 
 msgid "Blacklist"
 msgstr "黑名单"
@@ -131,10 +131,10 @@ msgstr "IP地址"
 
 msgid ""
 "If you operate your own wifi equipment use channels different from ours."
-msgstr "如果你操作你自有的wifi设备,使用与我们不同的频道"
+msgstr "如果您操作您自有的wifi设备,使用与我们不同的频道"
 
 msgid "If you use this network on a regular basis we ask for your support:"
-msgstr "如果你经常使用这个网络,我们需要你的支持"
+msgstr "如果您经常使用这个网络,我们需要您的支持"
 
 msgid "Include your own text in the default splash"
 msgstr ""
@@ -277,7 +277,7 @@ msgid ""
 msgstr ""
 
 msgid "Your bandwidth is limited to"
-msgstr "的带宽限制为"
+msgstr "的带宽限制为"
 
 msgid "blacklisted"
 msgstr "黑名单"
diff --git a/applications/luci-app-squid/Makefile b/applications/luci-app-squid/Makefile
new file mode 100644 (file)
index 0000000..82802c0
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Squid LuCI Interface
+LUCI_DEPENDS:=+luci-mod-admin-full +squid
+
+PKG_MAINTAINER:=Marko Ratkaj <marko.ratkaj@sartura.hr>
+PKG_LICENSE:=Apache-2.0
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-squid/luasrc/controller/squid.lua b/applications/luci-app-squid/luasrc/controller/squid.lua
new file mode 100644 (file)
index 0000000..09946a1
--- /dev/null
@@ -0,0 +1,21 @@
+--[[
+
+LuCI Squid module
+
+Copyright (C) 2015, OpenWrt.org
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+
+]]--
+
+module("luci.controller.squid", package.seeall)
+
+function index()
+       entry({"admin", "services", "squid"}, cbi("squid"), _("Squid"))
+end
diff --git a/applications/luci-app-squid/luasrc/model/cbi/squid.lua b/applications/luci-app-squid/luasrc/model/cbi/squid.lua
new file mode 100644 (file)
index 0000000..0ac554a
--- /dev/null
@@ -0,0 +1,67 @@
+--[[
+
+LuCI Squid module
+
+Copyright (C) 2015, OpenWrt.org
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Author: Marko Ratkaj <marko.ratkaj@sartura.hr>
+
+]]--
+
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+require "ubus"
+
+m = Map("squid", translate("Squid"))
+m.on_after_commit = function() luci.sys.call("/etc/init.d/squid restart") end
+
+s = m:section(TypedSection, "squid")
+s.anonymous = true
+s.addremove = false
+
+s:tab("general", translate("General Settings"))
+
+http_port = s:taboption("general", Value, "http_port", translate("Port"))
+http_port.datatype = "portrange"
+http_port.placeholder = "0-65535"
+
+visible_hostname = s:taboption("general", Value, "visible_hostname", translate("Visible Hostname"))
+visible_hostname.datatype="string"
+visible_hostname.placeholder = "OpenWrt"
+
+coredump_dir = s:taboption("general", Value, "coredump_dir", translate("Coredump files directory"))
+coredump_dir.datatype="string"
+coredump_dir.placeholder = "/tmp/squid"
+
+s:tab("advanced", translate("Advanced Settings"))
+
+squid_config_file = s:taboption("advanced", TextValue, "_data", "")
+squid_config_file.wrap = "off"
+squid_config_file.rows = 25
+squid_config_file.rmempty = false
+
+function squid_config_file.cfgvalue()
+       local uci = require "luci.model.uci".cursor_state()
+       local file = uci:get("squid", "squid", "config_file")
+       if file then
+               return fs.readfile(file) or ""
+       else
+               return ""
+       end
+end
+
+function squid_config_file.write(self, section, value)
+    if value then
+               local uci = require "luci.model.uci".cursor_state()
+               local file = uci:get("squid", "squid", "config_file")
+       fs.writefile(file, value:gsub("\r\n", "\n"))
+    end
+end
+
+return m
index 36c5554..ec26f02 100644 (file)
@@ -23,7 +23,9 @@ function index()
                s_general       = _("General plugins"),
                s_network       = _("Network plugins"),
 
+               apcups          = _("APC UPS"),
                conntrack       = _("Conntrack"),
+               contextswitch   = _("Context Switches"),
                cpu                     = _("Processor"),
                cpufreq         = _("CPU Frequency"),
                csv                     = _("CSV Output"),
@@ -58,8 +60,8 @@ function index()
        -- our collectd menu
        local collectd_menu = {
                output  = { "csv", "network", "rrdtool", "unixsock" },
-               general = { "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",
@@ -87,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
diff --git a/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/contextswitch.lua b/applications/luci-app-statistics/luasrc/model/cbi/luci_statistics/contextswitch.lua
new file mode 100644 (file)
index 0000000..7ae6b24
--- /dev/null
@@ -0,0 +1,14 @@
+-- Licensed to the public under the Apache License 2.0.
+
+m = Map("luci_statistics",
+       translate("CPU Context Switches Plugin Configuration"),
+       translate("This plugin collects statistics about the processor context switches."))
+
+-- collectd_contextswitch config section
+s = m:section( NamedSection, "collectd_contextswitch", "luci_statistics" )
+
+-- collectd_contextswitch.enable
+enable = s:option( Flag, "enable", translate("Enable this plugin") )
+enable.default = 0
+
+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
diff --git a/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/contextswitch.lua b/applications/luci-app-statistics/luasrc/statistics/rrdtool/definitions/contextswitch.lua
new file mode 100644 (file)
index 0000000..6826e12
--- /dev/null
@@ -0,0 +1,23 @@
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.statistics.rrdtool.definitions.contextswitch",package.seeall)
+
+function rrdargs( graph, plugin, plugin_instance, dtype )
+
+       return {
+               title = "%H: Context switches",
+               alt_autoscale = true,
+               vlabel = "Switches/s",
+               number_format = "%5.0lf",
+               data = {
+                       types = { "contextswitch" },
+                       sources = {
+                               contextswitch = { "value" }
+                       },
+                       options = {
+                               contextswitch = { color = "0000ff", title = "Context switches", noarea=true, overlay=true }
+                       }
+               }
+       }
+end
+
index d48441a..62d0545 100644 (file)
@@ -5,28 +5,30 @@ module("luci.statistics.rrdtool.definitions.processes", package.seeall)
 
 function rrdargs( graph, plugin, plugin_instance, dtype )
 
+    if  plugin_instance == "" then
        return {
-               {
                        title = "%H: Processes",
                        vlabel = "Processes/s",
                        data = {
                                instances = {
                                        ps_state = {
-                                               "sleeping", "running", "paging", "blocked", "stopped", "zombies"
+                                               "sleeping", "running", "paging",
+                                               "blocked", "stopped", "zombies"
                                        }
                                },
 
                                options = {
-                                       ps_state_sleeping = { color = "0000ff" },
-                                       ps_state_running  = { color = "008000" },
-                                       ps_state_paging   = { color = "ffff00" },
-                                       ps_state_blocked  = { color = "ff5000" },
-                                       ps_state_stopped  = { color = "555555" },
-                                       ps_state_zombies  = { color = "ff0000" }
+                                       ps_state_sleeping = { color = "0000ff", title = "Sleeping" },
+                                       ps_state_running  = { color = "008000", title = "Running" },
+                                       ps_state_paging   = { color = "ffff00", title = "Paging" },
+                                       ps_state_blocked  = { color = "ff5000", title = "Blocked" },
+                                       ps_state_stopped  = { color = "555555", title = "Stopped" },
+                                       ps_state_zombies  = { color = "ff0000", title = "Zombies" }
                                }
                        }
-               },
-
+       }
+    else
+       return {
                {
                        title = "%H: CPU time used by %pi",
                        vlabel = "Jiffies",
@@ -38,11 +40,13 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                                options = {
                                        ps_cputime__user = {
                                                color   = "0000ff",
+                                               title   = "User",
                                                overlay = true
                                        },
 
                                        ps_cputime__syst = {
                                                color   = "ff0000",
+                                               title   = "System",
                                                overlay = true
                                        }
                                }
@@ -59,15 +63,15 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                                },
 
                                options = {
-                                       ps_count__threads   = { color = "00ff00" },
-                                       ps_count__processes = { color = "0000bb" }
+                                       ps_count__threads   = { color = "00ff00", title = "Threads" },
+                                       ps_count__processes = { color = "0000bb", title = "Processes" }
                                }
                        }
                },
 
                {
                        title = "%H: Page faults in %pi",
-                       vlabel = "Pagefaults",
+                       vlabel = "Page faults",
                        detail = true,
                        data = {
                                sources = {
@@ -75,14 +79,14 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                                },
 
                                options = {
-                                       ps_pagefaults__minflt = { color = "ff0000" },
-                                       ps_pagefaults__majflt = { color = "ff5500" }
+                                       ps_pagefaults__minflt = { color = "0000ff", title = "Minor" },
+                                       ps_pagefaults__majflt = { color = "ff0000", title = "Major" }
                                }
                        }
                },
 
                {
-                       title = "%H: Virtual memory size of %pi",
+                       title = "%H: Resident segment size (RSS) of %pi",
                        vlabel = "Bytes",
                        detail = true,
                        number_format = "%5.1lf%sB",
@@ -90,9 +94,24 @@ function rrdargs( graph, plugin, plugin_instance, dtype )
                                types = { "ps_rss" },
 
                                options = {
-                                       ps_rss = { color = "0000ff" }
+                                       ps_rss = { color = "0000ff", title = "Resident segment" }
+                               }
+                       }
+               },
+
+               {
+                       title = "%H: Virtual memory size (VSZ) of %pi",
+                       vlabel = "Bytes",
+                       detail = true,
+                       number_format = "%5.1lf%sB",
+                       data = {
+                               types = { "ps_vm" },
+
+                               options = {
+                                       ps_vm = { color = "0000ff", title = "Virtual memory" }
                                }
                        }
                }
        }
+    end
 end
index ebc78ba..85a20d9 100644 (file)
@@ -29,9 +29,7 @@
 
 <div style="text-align: center">
        <% for i, img in ipairs(images) do %>
-               <% if is_index then %><a href="<%=pcdata(images[img])%>"><% end %>
                <img src="<%=REQUEST_URI%>?img=<%=img%>&#38;host=<%=current_host%>" />
-               <% if is_index then %></a><% end %>
                <br />
        <% end %>
 </div>
index b6a98a0..738af55 100644 (file)
@@ -15,6 +15,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Acció (objectiu)"
 
@@ -39,6 +45,9 @@ msgstr "Directori base"
 msgid "Basic monitoring"
 msgstr "Monitoreig bàsic"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -90,6 +99,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Configuració del connector Conntrack"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Configuració del connector DF"
 
@@ -289,6 +301,9 @@ msgstr "Monitoritza els discs i les particions"
 msgid "Monitor filesystem types"
 msgstr "Monitoritza els tipus de sistema de fitxers"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitoritza màquines"
 
@@ -375,6 +390,9 @@ msgstr "Configuració del connector ping"
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processos"
 
@@ -500,6 +518,9 @@ msgstr "TTL per paquets ping"
 msgid "Table"
 msgstr "Taula"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -696,6 +717,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index b4a936a..fc3f513 100644 (file)
@@ -11,6 +11,12 @@ msgstr ""
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Akce (cíl)"
 
@@ -35,6 +41,9 @@ msgstr "Základní adresář"
 msgid "Basic monitoring"
 msgstr "Základní sledování"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -86,6 +95,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Nastavení pluginu Conntrack"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Nastavení pluginu DF"
 
@@ -284,6 +296,9 @@ msgstr "Sledovat disky a oddíly"
 msgid "Monitor filesystem types"
 msgstr "Sledovat typy souborových systémů"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Sledovat hostitele"
 
@@ -370,6 +385,9 @@ msgstr "Nastavení pluginu Ping"
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Procesy"
 
@@ -494,6 +512,9 @@ msgstr "TTL pro pakety pingu"
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -682,6 +703,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index ef29176..45ba020 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Aktion (Ziel)"
 
@@ -37,6 +43,9 @@ msgstr "Basisverzeichnis"
 msgid "Basic monitoring"
 msgstr "Schnittstellen einfach überwachen"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Conntrack Plugin Einstellungen"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "DF Plugin Konfiguration"
 
@@ -291,6 +303,9 @@ msgstr "Geräte und Partitionen überwachen"
 msgid "Monitor filesystem types"
 msgstr "Datesystemtypen überwachen"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Hosts überwachen"
 
@@ -377,6 +392,9 @@ msgstr "Ping Plugin Konfiguration"
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Prozesse"
 
@@ -500,6 +518,9 @@ msgstr "TTL für Ping Pakete"
 msgid "Table"
 msgstr "Tabelle"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 "Das NUT-Plugin liest Informationen über Unterbrechungsfreie Stromversorgungen"
@@ -701,6 +722,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 9b530c0..4062868 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.4\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -38,6 +44,9 @@ msgstr "Κατάλογος βάσης"
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -89,6 +98,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -282,6 +294,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -368,6 +383,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Διεργασίες"
 
@@ -491,6 +509,9 @@ msgstr ""
 msgid "Table"
 msgstr "Πίνακας"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -642,6 +663,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 3e9c829..f7ebfe0 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Translate Toolkit 1.1.1\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Action (target)"
 
@@ -37,6 +43,9 @@ msgstr "Base Directory"
 msgid "Basic monitoring"
 msgstr "Basic monitoring"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "DF Plugin Configuration"
 
@@ -287,6 +299,9 @@ msgstr "Monitor disks and partitions"
 msgid "Monitor filesystem types"
 msgstr "Monitor filesystem types"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitor hosts"
 
@@ -373,6 +388,9 @@ msgstr "Ping Plugin Configuration"
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processes"
 
@@ -496,6 +514,9 @@ msgstr "TTL for ping packets"
 msgid "Table"
 msgstr "Table"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -684,6 +705,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 2db483c..3c811ff 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Acción (objetivo)"
 
@@ -37,6 +43,9 @@ msgstr "Directorio Base"
 msgid "Basic monitoring"
 msgstr "Monitorización básica"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr "Seguimiento"
 msgid "Conntrack Plugin Configuration"
 msgstr "Configuración del seguimiento"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Configuración del plugin DF"
 
@@ -286,6 +298,9 @@ msgstr "Monitorizar discos y particiones"
 msgid "Monitor filesystem types"
 msgstr "Monitorizar tipos de sistema de archivos"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitorizar máquinas"
 
@@ -372,6 +387,9 @@ msgstr "Configuración del plugin \"Ping\""
 msgid "Port"
 msgstr "Puerto"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Procesos"
 
@@ -495,6 +513,9 @@ msgstr "TTL para paquetes de ping"
 msgid "Table"
 msgstr "Tabla"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 "El plugin NUT obtiene información sobre Sistemas de Alimentación "
@@ -697,6 +718,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index d4190d3..bc156dd 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
 "X-Generator: Pootle 2.0.4\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Action (cible)"
 
@@ -37,6 +43,9 @@ msgstr "Répertoire de base"
 msgid "Basic monitoring"
 msgstr "Surveillance de base"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Configuration du greffon DF"
 
@@ -288,6 +300,9 @@ msgstr "Disques et partitions à surveiller"
 msgid "Monitor filesystem types"
 msgstr "types de systèmes de fichier à surveiller"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Hôtes à surveiller"
 
@@ -374,6 +389,9 @@ msgstr "Configuration du greffon Ping"
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processus"
 
@@ -497,6 +515,9 @@ msgstr "TTL des paquets ping"
 msgid "Table"
 msgstr "Table"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -690,6 +711,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index e27d219..35f978e 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -37,6 +43,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -85,6 +94,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -277,6 +289,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -363,6 +378,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -486,6 +504,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -637,6 +658,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 4767442..e5c4e60 100644 (file)
@@ -11,6 +11,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Tevékenység (cél)"
 
@@ -35,6 +41,9 @@ msgstr "Alapkönyvtár"
 msgid "Basic monitoring"
 msgstr "Általános figyelés"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -86,6 +95,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Conntrack bővítmény beállítása"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "DF bővítmény beállítása"
 
@@ -289,6 +301,9 @@ msgstr "Lemezek és partíciók figyelése"
 msgid "Monitor filesystem types"
 msgstr "Fájlrendszer típusok figyelése"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Gépek figyelése"
 
@@ -375,6 +390,9 @@ msgstr "Ping bővítmény beállítása"
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Folyamatok"
 
@@ -502,6 +520,9 @@ msgstr "TTL a ping csomagokhoz"
 msgid "Table"
 msgstr "Táblázat"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr "A NUT bővítmény a szünetmentes tápokról ad információkat."
 
@@ -684,6 +705,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 3c50ac3..2451503 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Azione (destinazione)"
 
@@ -37,6 +43,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -287,6 +299,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -373,6 +388,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -496,6 +514,9 @@ msgstr ""
 msgid "Table"
 msgstr "Tabella"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -647,6 +668,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 2a3ffe5..53941cf 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "X-Generator: Poedit 1.8.11\n"
 "Language-Team: \n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "アクション(対象)"
 
@@ -37,6 +43,9 @@ msgstr "ベース・ディレクトリ"
 msgid "Basic monitoring"
 msgstr "基本モニタリング"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr "CPU 周波数"
 
@@ -87,6 +96,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Conntrack プラグイン設定"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "DF プラグイン設定"
 
@@ -289,6 +301,9 @@ msgstr "ディスクとパーティションをモニターする"
 msgid "Monitor filesystem types"
 msgstr "ファイルシステム タイプをモニターする"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "ホストをモニターする"
 
@@ -378,6 +393,9 @@ msgstr "Ping プラグイン設定"
 msgid "Port"
 msgstr "ポート"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "プロセス"
 
@@ -501,6 +519,9 @@ msgstr "pingパケットのTTL"
 msgid "Table"
 msgstr "テーブル"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr "NUT プラグインは、無停電電源装置についての情報を読み取ります。"
 
@@ -699,6 +720,9 @@ msgstr "サーマル"
 msgid "Thermal Plugin Configuration"
 msgstr "サーマル プラグイン設定"
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 "このプラグインは、プロセッサー周波数スケーリングについての統計を収集します。"
index 2a04776..c02556f 100644 (file)
@@ -10,6 +10,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -34,6 +40,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -82,6 +91,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -274,6 +286,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -360,6 +375,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -483,6 +501,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -634,6 +655,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 3e3a8e1..4de2ee6 100644 (file)
@@ -4,6 +4,12 @@ msgstr ""
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Handling (mål)"
 
@@ -28,6 +34,9 @@ msgstr "Hoved Katalog"
 msgid "Basic monitoring"
 msgstr "Enkel overvåking"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -79,6 +88,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "DF plugin konfigurasjon"
 
@@ -276,6 +288,9 @@ msgstr "Overvåk disker og partisjoner"
 msgid "Monitor filesystem types"
 msgstr "Overvåk filsystem typer"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Overvåk verter"
 
@@ -362,6 +377,9 @@ msgstr "Ping plugin konfigurasjon"
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Prosesser"
 
@@ -485,6 +503,9 @@ msgstr "TTL for ping pakker"
 msgid "Table"
 msgstr "Tabell"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -672,6 +693,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 474b673..6e34ce0 100644 (file)
@@ -14,6 +14,12 @@ msgstr ""
 "|| n%100>=20) ? 1 : 2);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Akcja (cel)"
 
@@ -38,6 +44,9 @@ msgstr "Główny katalog"
 msgid "Basic monitoring"
 msgstr "Podstawowy monitoring"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -89,6 +98,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Konfiguracja wtyczki Conntrack"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Konfiguracja wtyczki DF"
 
@@ -290,6 +302,9 @@ msgstr "Monitoruj dyski i partycje"
 msgid "Monitor filesystem types"
 msgstr "Monitoruj system plików"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitoruj hosty"
 
@@ -376,6 +391,9 @@ msgstr "Konfiguracja wtyczki Ping"
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Procesy"
 
@@ -500,6 +518,9 @@ msgstr "TTL dla pakietów ping"
 msgid "Table"
 msgstr "Tabela"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr "Wtyczka Nut Informuje o Nie przerywalnym Zasilaniu"
 
@@ -692,6 +713,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 44f53f0..c5d6899 100644 (file)
@@ -1,17 +1,23 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2014-03-15 22:12+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-22 18:27-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
+
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
 
 msgid "Action (target)"
 msgstr "Ação (destino)"
@@ -29,7 +35,7 @@ msgid "Add notification command"
 msgstr "Adicionar o comando de notificação"
 
 msgid "Aggregate number of connected users"
-msgstr ""
+msgstr "Numero agregado de usuários conectados"
 
 msgid "Base Directory"
 msgstr "Diretório Base"
@@ -37,11 +43,14 @@ msgstr "Diretório Base"
 msgid "Basic monitoring"
 msgstr "Monitoramento básico"
 
-msgid "CPU Frequency"
+msgid "CPU Context Switches Plugin Configuration"
 msgstr ""
 
+msgid "CPU Frequency"
+msgstr "Frequência da CPU"
+
 msgid "CPU Frequency Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin da Frequência da CPU"
 
 msgid "CPU Plugin Configuration"
 msgstr "Configuração do plugin CPU"
@@ -88,6 +97,9 @@ msgstr "Conntrack"
 msgid "Conntrack Plugin Configuration"
 msgstr "Configuração do Plugin do Conntrack"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Configuração do plugin DF"
 
@@ -134,16 +146,16 @@ msgid "Email"
 msgstr "Email"
 
 msgid "Empty value = monitor all"
-msgstr ""
+msgstr "Valor vazio = monitore todos"
 
 msgid "Enable this plugin"
 msgstr "Habilitar este plugin"
 
 msgid "Entropy"
-msgstr ""
+msgstr "Entropia"
 
 msgid "Entropy Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin de Entropia"
 
 msgid "Exec"
 msgstr "Exec"
@@ -165,13 +177,13 @@ msgstr ""
 "Encaminhamento entre o endereço de escuta e os endereços dos servidores"
 
 msgid "Gather compression statistics"
-msgstr ""
+msgstr "Obter estatísticas sobre a compressão"
 
 msgid "General plugins"
-msgstr ""
+msgstr "Plugins Gerais"
 
 msgid "Generate a separate graph for each logged user"
-msgstr ""
+msgstr "Gerar um gráfico separado para cada usuário conectado"
 
 msgid "Graphs"
 msgstr "Gráficos"
@@ -204,6 +216,7 @@ msgstr ""
 
 msgid "Hold Ctrl to select multiple items or to deselect entries."
 msgstr ""
+"Segure o Ctrl para selecionar múltiplos itens ou para retirar entradas. "
 
 msgid "Host"
 msgstr "Equipamento"
@@ -259,6 +272,8 @@ msgid ""
 "Max values for a period can be used instead of averages when not using 'only "
 "average RRAs'"
 msgstr ""
+"Valores máximos para um período podem ser usados em vez de médias quando não "
+"estiver usando 'somente RRAs de médias'"
 
 msgid "Maximum allowed connections"
 msgstr "Máximo de conexões permitidas"
@@ -276,10 +291,10 @@ msgid "Monitor all local listen ports"
 msgstr "Monitorar todas as portas locais"
 
 msgid "Monitor all sensors"
-msgstr ""
+msgstr "Monitorar todas os sensores"
 
 msgid "Monitor device(s) / thermal zone(s)"
-msgstr ""
+msgstr "Dispositivo(s) de monitoramento / zona(s) térmica(s)"
 
 msgid "Monitor devices"
 msgstr "Monitorar dispositivos"
@@ -290,6 +305,9 @@ msgstr "Monitoras discos e partições"
 msgid "Monitor filesystem types"
 msgstr "Monitorar tipos de sistemas de arquivos"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitorar os equipamentos"
 
@@ -336,6 +354,9 @@ msgid ""
 "Note: as pages are rendered by user 'nobody', the *.rrd files, the storage "
 "directory and all its parent directories need to be world readable."
 msgstr ""
+"Nota: como as páginas são renderizadas pelo usuário 'nobody', os arquivos * ."
+"rrd, o diretório de armazenamento e todos os seus diretórios superiores "
+"precisam ser legíveis a todos."
 
 msgid "Number of threads for data collection"
 msgstr "Número de threads para o coletor de dados"
@@ -350,13 +371,13 @@ msgid "Only create average RRAs"
 msgstr "Somente criar RRAs de média"
 
 msgid "OpenVPN"
-msgstr ""
+msgstr "OpenVPN"
 
 msgid "OpenVPN Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin do OpenVPN"
 
 msgid "OpenVPN status files"
-msgstr ""
+msgstr "Arquivos de estado do OpenVPN"
 
 msgid "Options"
 msgstr "Opções"
@@ -376,6 +397,9 @@ msgstr "Configuração do plugin Ping"
 msgid "Port"
 msgstr "Porta"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processos"
 
@@ -416,13 +440,13 @@ msgid "Seconds"
 msgstr "Segundos"
 
 msgid "Sensor list"
-msgstr ""
+msgstr "Lista de sensores"
 
 msgid "Sensors"
-msgstr ""
+msgstr "Sensores"
 
 msgid "Sensors Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin de Sensores"
 
 msgid "Server host"
 msgstr "Endereço do servidor"
@@ -431,13 +455,13 @@ msgid "Server port"
 msgstr "Porta do servidor"
 
 msgid "Setup"
-msgstr ""
+msgstr "Configuração"
 
 msgid "Shaping class monitoring"
 msgstr "Monitoramento das Classes de Shaping"
 
 msgid "Show max values instead of averages"
-msgstr ""
+msgstr "Mostrar valores máximos em vez de médias"
 
 msgid "Socket file"
 msgstr "Arquivo do socket"
@@ -461,10 +485,10 @@ msgid "Specifies what information to collect about the global topology."
 msgstr "Especifica quais informações serão coletadas sobre a topologia global."
 
 msgid "Splash Leases"
-msgstr ""
+msgstr "Concessões do Splash"
 
 msgid "Splash Leases Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin das Concessões do Splash"
 
 msgid "Statistics"
 msgstr "Estatística"
@@ -499,6 +523,9 @@ msgstr "TTL para os pacotes do ping"
 msgid "Table"
 msgstr "Tabela"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr "O plugin NUT lê informações sobre Fontes de alimentação ininterruptas."
 
@@ -513,6 +540,7 @@ msgid ""
 "The OpenVPN plugin gathers information about the current vpn connection "
 "status."
 msgstr ""
+"O plugin OpenVPN reúne informações sobre o status atual da conexão VPN."
 
 msgid ""
 "The conntrack plugin collects statistics about the number of tracked "
@@ -565,7 +593,7 @@ msgstr ""
 "Plugin::Collectd mas pode ser utilizado de outras maneiras também."
 
 msgid "The entropy plugin collects statistics about the available entropy."
-msgstr ""
+msgstr "O plugin de entropia coleta estatísticas sobre a entropia disponível."
 
 msgid ""
 "The exec plugin starts external commands to read values from or to notify "
@@ -656,17 +684,24 @@ msgid ""
 "The sensors plugin uses the Linux Sensors framework to gather environmental "
 "statistics."
 msgstr ""
+"O plugin de sensores usa a estrutura de sensores do Linux para coletar "
+"estatísticas ambientais."
 
 msgid ""
 "The splash leases plugin uses libuci to collect statistics about splash "
 "leases."
 msgstr ""
+"O plug-in de concessões splash usa o libuci para coletar estatísticas sobre "
+"concessões de splash."
 
 msgid ""
 "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
 "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
 "render diagram images."
 msgstr ""
+"O pacote de estatísticas usa <a href=\"https://collectd.org/\"> Collectd </"
+"a> para coletar dados e <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</"
+"a>  para desenhar os gráficos."
 
 msgid ""
 "The tcpconns plugin collects informations about open tcp connections on "
@@ -680,6 +715,9 @@ msgid ""
 "read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be "
 "read, e.g. thermal_zone1 )"
 msgstr ""
+"O plugin térmico monitorará a temperatura do sistema. Os dados são "
+"tipicamente lidos de /sys/class/thermal/*/temp ('*' indica o dispositivo "
+"térmico a ser lido, ex:, thermal_zone1)"
 
 msgid ""
 "The unixsock plugin creates a unix socket which can be used to read "
@@ -690,15 +728,22 @@ msgstr ""
 
 msgid "The uptime plugin collects statistics about the uptime of the system."
 msgstr ""
+"O plugin de tempo de atividade coleta estatísticas sobre o tempo de "
+"atividade do sistema."
 
 msgid "Thermal"
-msgstr ""
+msgstr "Térmico"
 
 msgid "Thermal Plugin Configuration"
+msgstr "Configuração do Plugin Térmico"
+
+msgid "This plugin collects statistics about the processor context switches."
 msgstr ""
 
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
+"Este plugin coleta as estatísticas sobre o escalonamento da frequência do "
+"processador."
 
 msgid ""
 "This section defines on which interfaces collectd will wait for incoming "
@@ -732,13 +777,13 @@ msgid "Unixsock Plugin Configuration"
 msgstr "Configuração do plugin Unixsock"
 
 msgid "Uptime"
-msgstr ""
+msgstr "Tempo de atividade"
 
 msgid "Uptime Plugin Configuration"
-msgstr ""
+msgstr "Configuração do Plugin de Tempo de Atividade"
 
 msgid "Use improved naming schema"
-msgstr ""
+msgstr "Use um esquema de nomeação melhorado"
 
 msgid "Used PID file"
 msgstr "Arquivo PID usado"
@@ -758,6 +803,8 @@ msgstr "Configuração do Plugin iwinfo da Rede Sem Fio (Wireless)"
 msgid ""
 "You can install additional collectd-mod-* plugins to enable more statistics."
 msgstr ""
+"Você pode instalar plugins adicionais (collectd-mod-*) para habilitar mais "
+"estatísticas."
 
 msgid "e.g. br-ff"
 msgstr "ex: br-ff"
index 1913d77..245e6e9 100644 (file)
@@ -13,6 +13,12 @@ msgstr ""
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Ação (destino)"
 
@@ -37,6 +43,9 @@ msgstr "Diretório Base"
 msgid "Basic monitoring"
 msgstr "Monitoramento básico"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -88,6 +97,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Configuração do plugin DF"
 
@@ -289,6 +301,9 @@ msgstr "Monitoras discos e partições"
 msgid "Monitor filesystem types"
 msgstr "Monitorar tipos de sistemas de arquivos"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitorar os hosts"
 
@@ -375,6 +390,9 @@ msgstr "Configuração do plugin Ping"
 msgid "Port"
 msgstr "Porta"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processos"
 
@@ -498,6 +516,9 @@ msgstr "TTL para os pacotes do ping"
 msgid "Table"
 msgstr "Tabela"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -690,6 +711,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 008cc88..a326fec 100644 (file)
@@ -14,6 +14,12 @@ msgstr ""
 "20)) ? 1 : 2);;\n"
 "X-Generator: Pootle 2.0.4\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -38,6 +44,9 @@ msgstr "Directorul de baza"
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -89,6 +98,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -281,6 +293,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -367,6 +382,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Procese"
 
@@ -490,6 +508,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -643,6 +664,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index cb14847..9d0ff9f 100644 (file)
@@ -15,6 +15,12 @@ msgstr ""
 "X-Generator: Pootle 2.0.6\n"
 "X-Poedit-SourceCharset: UTF-8\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Действие (цель)"
 
@@ -39,6 +45,9 @@ msgstr "Базовая директория"
 msgid "Basic monitoring"
 msgstr "Базовая статистика"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -89,6 +98,9 @@ msgstr "Отслеживание подключения (Conntrack)"
 msgid "Conntrack Plugin Configuration"
 msgstr "Настройка плагина Conntrack"
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Конфигурация модуля DF"
 
@@ -291,6 +303,9 @@ msgstr "Собирать статистику с дисков и раздело
 msgid "Monitor filesystem types"
 msgstr "Собирать статистику с файловых систем"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Собирать статистику с хостов"
 
@@ -377,6 +392,9 @@ msgstr "Конфигурация модуля Ping"
 msgid "Port"
 msgstr "Порт"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Процессы"
 
@@ -502,6 +520,9 @@ msgstr "TTL для ping-пакетов"
 msgid "Table"
 msgstr "Таблица"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -688,6 +709,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 1d1f013..53858ca 100644 (file)
@@ -8,6 +8,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -32,6 +38,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -80,6 +89,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -272,6 +284,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -358,6 +373,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -481,6 +499,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -632,6 +653,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index b6d562b..9d738f2 100644 (file)
@@ -9,6 +9,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -33,6 +39,9 @@ msgstr "Basmapp"
 msgid "Basic monitoring"
 msgstr "Standardövervakning"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -84,6 +93,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Konfiguration av insticksprogrammet DF"
 
@@ -277,6 +289,9 @@ msgstr "Övervaka hårddiskar och partitioner"
 msgid "Monitor filesystem types"
 msgstr "Övervaka filsystemtyper"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Övervaka värdar"
 
@@ -363,6 +378,9 @@ msgstr ""
 msgid "Port"
 msgstr "Port"
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Processer"
 
@@ -486,6 +504,9 @@ msgstr "TTL för ping-paket"
 msgid "Table"
 msgstr "Tabell"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -637,6 +658,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 1b83826..ec630b6 100644 (file)
@@ -1,6 +1,12 @@
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -25,6 +31,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -73,6 +82,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -265,6 +277,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -351,6 +366,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -474,6 +492,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -625,6 +646,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index a30b0b9..860ff95 100644 (file)
@@ -9,6 +9,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=1; plural=0;\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -33,6 +39,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -81,6 +90,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -273,6 +285,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -359,6 +374,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -482,6 +500,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -633,6 +654,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 13e52d9..ac9ae50 100644 (file)
@@ -14,6 +14,12 @@ msgstr ""
 "10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
 "X-Generator: Pootle 2.0.6\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr ""
 
@@ -38,6 +44,9 @@ msgstr ""
 msgid "Basic monitoring"
 msgstr ""
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -86,6 +95,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr ""
 
@@ -278,6 +290,9 @@ msgstr ""
 msgid "Monitor filesystem types"
 msgstr ""
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr ""
 
@@ -364,6 +379,9 @@ msgstr ""
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr ""
 
@@ -487,6 +505,9 @@ msgstr ""
 msgid "Table"
 msgstr ""
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -638,6 +659,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index a5fd33d..f5798a2 100644 (file)
@@ -14,6 +14,12 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Pootle 1.1.0\n"
 
+msgid "APC UPS"
+msgstr ""
+
+msgid "APCUPS Plugin Configuration"
+msgstr ""
+
 msgid "Action (target)"
 msgstr "Action (target)"
 
@@ -38,6 +44,9 @@ msgstr "Thư mục Cơ sở"
 msgid "Basic monitoring"
 msgstr "Monitoring căn bản"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr ""
+
 msgid "CPU Frequency"
 msgstr ""
 
@@ -89,6 +98,9 @@ msgstr ""
 msgid "Conntrack Plugin Configuration"
 msgstr ""
 
+msgid "Context Switches"
+msgstr ""
+
 msgid "DF Plugin Configuration"
 msgstr "Cấu hình DF plugin"
 
@@ -288,6 +300,9 @@ msgstr "Kiểm soát đĩa và phân vùng"
 msgid "Monitor filesystem types"
 msgstr "Kiểm soát loại filesystem"
 
+msgid "Monitor host"
+msgstr ""
+
 msgid "Monitor hosts"
 msgstr "Monitor hosts"
 
@@ -374,6 +389,9 @@ msgstr "Cấu hình Ping plugin"
 msgid "Port"
 msgstr ""
 
+msgid "Port for apcupsd communication"
+msgstr ""
+
 msgid "Processes"
 msgstr "Quá trình xử lý"
 
@@ -497,6 +515,9 @@ msgstr "TTl cho gói ping"
 msgid "Table"
 msgstr "Table"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr ""
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
 msgstr ""
 
@@ -690,6 +711,9 @@ msgstr ""
 msgid "Thermal Plugin Configuration"
 msgstr ""
 
+msgid "This plugin collects statistics about the processor context switches."
+msgstr ""
+
 msgid "This plugin collects statistics about the processor frequency scaling."
 msgstr ""
 
index 4e6ee4b..eef7ba6 100644 (file)
@@ -1,17 +1,20 @@
 #  rrdtool.pot
 #  generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-07-23 02:08+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
-"Language-Team: none\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-10-29 15:39+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
+"POT-Creation-Date: \n"
 
 #. %H: Wireless - Signal Noise Ratio
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1
@@ -36,12 +39,12 @@ msgstr "信号强度"
 #. %H: Wireless - Signal Quality
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5
 msgid "stat_dg_title_wireless__signal_quality"
-msgstr "无线信号质量"
+msgstr "%H:无线 - 信号质量"
 
 #. n
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6
 msgid "stat_dg_label_wireless__signal_quality"
-msgstr "无线信号质量"
+msgstr "n"
 
 #. Signal Quality
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7
@@ -51,7 +54,7 @@ msgstr "信号质量"
 #. %H: ICMP Roundtrip Times
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8
 msgid "stat_dg_title_ping"
-msgstr "ping"
+msgstr "%H:ICMP 往返时间"
 
 #. ms
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9
@@ -61,299 +64,299 @@ msgstr "响应"
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10
 msgid "stat_ds_ping"
-msgstr "ping"
+msgstr "%di"
 
 #. %H: Firewall - Processed Packets
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11
 msgid "stat_dg_title_iptables__ipt_packets"
-msgstr "iptables包"
+msgstr "%H:防火墙 - 已处理的数据包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12
 msgid "stat_dg_label_iptables__ipt_packets"
-msgstr ""
+msgstr "包/s"
 
 #. Chain \"%di\"
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13
 msgid "stat_ds_ipt_packets"
-msgstr ""
+msgstr "链“%di”"
 
 #. %H: Netlink - Transfer on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14
 msgid "stat_dg_title_netlink__if_octets"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的数据传输"
 
 #. Bytes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15
 msgid "stat_dg_label_netlink__if_octets"
-msgstr ""
+msgstr "字节/秒"
 
 #. Bytes (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16
 msgid "stat_ds_if_octets"
-msgstr ""
+msgstr "字节 (%ds)"
 
 #. %H: Netlink - Packets on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17
 msgid "stat_dg_title_netlink__if_packets"
-msgstr ""
+msgstr "%H:Netlink - %pi 的数据包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18
 msgid "stat_dg_label_netlink__if_packets"
-msgstr ""
+msgstr "包/s"
 
 #. Processed (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19
 msgid "stat_ds_if_packets"
-msgstr ""
+msgstr "已处理 (%ds)"
 
 #. Dropped   (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20
 msgid "stat_ds_if_dropped"
-msgstr ""
+msgstr "丢弃 (%ds)"
 
 #. Errors    (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21
 msgid "stat_ds_if_errors"
-msgstr ""
+msgstr "错误 (%ds)"
 
 #. %H: Netlink - Multicast on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22
 msgid "stat_dg_title_netlink__if_multicast"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的多播"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23
 msgid "stat_dg_label_netlink__if_multicast"
-msgstr ""
+msgstr "包/s"
 
 #. Packets
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24
 msgid "stat_ds_if_multicast"
-msgstr ""
+msgstr "数据包"
 
 #. %H: Netlink - Collisions on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25
 msgid "stat_dg_title_netlink__if_collisions"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的 Collisions"
 
 #. Collisions/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26
 msgid "stat_dg_label_netlink__if_collisions"
-msgstr ""
+msgstr "碰撞/s"
 
 #. Collisions
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27
 msgid "stat_ds_if_collisions"
-msgstr ""
+msgstr "碰撞"
 
 #. %H: Netlink - Errors on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28
 msgid "stat_dg_title_netlink__if_tx_errors"
-msgstr ""
+msgstr "%H:Netlink - %pi 上发生的错误"
 
 #. Errors/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29
 msgid "stat_dg_label_netlink__if_tx_errors"
-msgstr ""
+msgstr "错误/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30
 msgid "stat_ds_if_tx_errors"
-msgstr ""
+msgstr "%di"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31
 msgid "stat_ds_if_rx_errors"
-msgstr ""
+msgstr "%di"
 
 #. %H: Processes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32
 msgid "stat_dg_title_processes"
-msgstr ""
+msgstr "%H:进程"
 
 #. Processes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33
 msgid "stat_dg_label_processes"
-msgstr ""
+msgstr "进程/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34
 msgid "stat_ds_ps_state"
-msgstr ""
+msgstr "%di"
 
 #. %H: Process %pi - used cpu time
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35
 msgid "stat_dg_title_processes__ps_cputime"
-msgstr ""
+msgstr "%H:进程 %s - 占用的 CPU 时间"
 
 #. Jiffies
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36
 msgid "stat_dg_label_processes__ps_cputime"
-msgstr ""
+msgstr "Jiffies"
 
 #. system
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37
 msgid "stat_ds_ps_cputime__syst"
-msgstr ""
+msgstr "系统"
 
 #. user
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38
 msgid "stat_ds_ps_cputime__user"
-msgstr ""
+msgstr "用户"
 
 #. %H: Process %pi - threads and processes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39
 msgid "stat_dg_title_processes__ps_count"
-msgstr ""
+msgstr "%H:进程 %pi - 进程与线程"
 
 #. Count
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40
 msgid "stat_dg_label_processes__ps_count"
-msgstr ""
+msgstr ""
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41
 msgid "stat_ds_ps_count"
-msgstr ""
+msgstr "%ds"
 
 #. %H: Process %pi - page faults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42
 msgid "stat_dg_title_processes__ps_pagefaults"
-msgstr ""
+msgstr "%H:进程 %pi - 分页错误"
 
 #. Pagefaults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43
 msgid "stat_dg_label_processes__ps_pagefaults"
-msgstr ""
+msgstr "分页错误"
 
 #. page faults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44
 msgid "stat_ds_ps_pagefaults"
-msgstr ""
+msgstr "分页错误"
 
 #. %H: Process %pi - virtual memory size
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45
 msgid "stat_dg_title_processes__ps_rss"
-msgstr ""
+msgstr "%H:进程 %pi - 虚拟内存大小"
 
 #. Bytes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46
 msgid "stat_dg_label_processes__ps_rss"
-msgstr ""
+msgstr "字节"
 
 #. virtual memory
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47
 msgid "stat_ds_ps_rss"
-msgstr ""
+msgstr "虚拟内存"
 
 #. %H: Usage on Processor #%pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48
 msgid "stat_dg_title_cpu"
-msgstr ""
+msgstr "%H:对处理器 #%pi 的占用"
 
 #. %
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49
 msgid "stat_dg_label_cpu"
-msgstr ""
+msgstr "%"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50
 msgid "stat_ds_cpu"
-msgstr ""
+msgstr "%di"
 
 #. %H: Transfer on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51
 msgid "stat_dg_title_interface__if_octets"
-msgstr ""
+msgstr "%H:%di 上的数据传输情况"
 
 #. Bytes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52
 msgid "stat_dg_label_interface__if_octets"
-msgstr ""
+msgstr "字节/秒"
 
 #. %H: Packets on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53
 msgid "stat_dg_title_interface__if_packets"
-msgstr ""
+msgstr "%H:%di 上的数据包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54
 msgid "stat_dg_label_interface__if_packets"
-msgstr ""
+msgstr "包/s"
 
 #. %H: TCP-Connections to Port %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55
 msgid "stat_dg_title_tcpconns"
-msgstr ""
+msgstr "%H:到端口 %pi 的 TCP 连接"
 
 #. Connections/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56
 msgid "stat_dg_label_tcpconns"
-msgstr ""
+msgstr "连接/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57
 msgid "stat_ds_tcp_connections"
-msgstr ""
+msgstr "%di"
 
 #. %H: Disk Space Usage on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58
 msgid "stat_dg_title_df"
-msgstr ""
+msgstr "%H:%di 上的磁盘占用情况"
 
 #. Bytes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59
 msgid "stat_dg_label_df"
-msgstr ""
+msgstr "字节"
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60
 msgid "stat_ds_df__free"
-msgstr ""
+msgstr "%ds"
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61
 msgid "stat_ds_df__used"
-msgstr ""
+msgstr "%ds"
 
 #. %H: Interrupts
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62
 msgid "stat_dg_title_irq"
-msgstr ""
+msgstr "%H:中断"
 
 #. Issues/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63
 msgid "stat_dg_label_irq"
-msgstr ""
+msgstr "中断/s"
 
 #. IRQ %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64
 msgid "stat_ds_irq"
-msgstr ""
+msgstr "IRQ %di"
 
 #. %H: System Load
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65
 msgid "stat_dg_title_load"
-msgstr ""
+msgstr "%H:系统负载"
 
 #. Load
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66
 msgid "stat_dg_label_load"
-msgstr ""
+msgstr "负载"
 
 #. 1 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67
 msgid "stat_ds_load__shortterm"
-msgstr ""
+msgstr "1 分钟"
 
 #. 5 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68
 msgid "stat_ds_load__midterm"
-msgstr ""
+msgstr "5 分钟"
 
 #. 15 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69
 msgid "stat_ds_load__longterm"
-msgstr ""
+msgstr "15 分钟"
index a55f73f..fe631b5 100644 (file)
@@ -1,17 +1,26 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2014-06-13 15:04+0200\n"
-"Last-Translator: phantasm131 <phantasm131@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-10-29 15:50+0800\n"
+"Last-Translator: Yangfl <mmyangfl@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: Pootle 2.0.6\n"
+"X-Generator: Gtranslator 2.91.7\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+
+msgid "APC UPS"
+msgstr "APC UPS"
+
+msgid "APCUPS Plugin Configuration"
+msgstr "APCUPS 插件配置"
 
 msgid "Action (target)"
 msgstr "动作(目标)"
@@ -29,7 +38,7 @@ msgid "Add notification command"
 msgstr "新增通知命令"
 
 msgid "Aggregate number of connected users"
-msgstr ""
+msgstr "连接用户总数"
 
 msgid "Base Directory"
 msgstr "基本目录"
@@ -37,20 +46,23 @@ msgstr "基本目录"
 msgid "Basic monitoring"
 msgstr "基本监控"
 
+msgid "CPU Context Switches Plugin Configuration"
+msgstr "CPU Context Switches 插件配置"
+
 msgid "CPU Frequency"
-msgstr ""
+msgstr "CPU 频率"
 
 msgid "CPU Frequency Plugin Configuration"
-msgstr ""
+msgstr "CPU 频率插件配置"
 
 msgid "CPU Plugin Configuration"
-msgstr "CPU插件配置"
+msgstr "CPU 插件配置"
 
 msgid "CSV Output"
-msgstr "CSV输出"
+msgstr "CSV 输出"
 
 msgid "CSV Plugin Configuration"
-msgstr "CSV插件配置"
+msgstr "CSV 插件配置"
 
 msgid "Cache collected data for"
 msgstr "收集缓存数据"
@@ -71,30 +83,33 @@ msgid "CollectTopology"
 msgstr "收集拓扑"
 
 msgid "Collectd Settings"
-msgstr "Collectd设置"
+msgstr "Collectd 设置"
 
 msgid ""
 "Collectd is a small daemon for collecting data from various sources through "
 "different plugins. On this page you can change general settings for the "
 "collectd daemon."
 msgstr ""
-"Collectd是一个通过不同插件用于收集各种源数据的小型守护程序。在此页面中,您可"
-"以更改Collectd守护进程常规设置。"
+"Collectd 是一个通过不同插件用于收集各种源数据的小型守护程序。在此页面中,您可"
+"以更改 Collectd 守护进程常规设置。"
 
 msgid "Conntrack"
 msgstr "Conntrack"
 
 msgid "Conntrack Plugin Configuration"
-msgstr "Conntrack插件设置"
+msgstr "Conntrack 插件配置"
+
+msgid "Context Switches"
+msgstr "上下文切换"
 
 msgid "DF Plugin Configuration"
-msgstr "DF插件设置"
+msgstr "DF 插件配置"
 
 msgid "DNS"
 msgstr "DNS"
 
 msgid "DNS Plugin Configuration"
-msgstr "DNS插件设置"
+msgstr "DNS 插件配置"
 
 msgid "Data collection interval"
 msgstr "数据收集间隙"
@@ -103,16 +118,16 @@ msgid "Datasets definition file"
 msgstr "数据集定义文件"
 
 msgid "Destination ip range"
-msgstr "目标IP区间"
+msgstr "目标 IP 区间"
 
 msgid "Directory for collectd plugins"
-msgstr "Collectd插件目录"
+msgstr "Collectd 插件目录"
 
 msgid "Directory for sub-configurations"
 msgstr "子配置目录"
 
 msgid "Disk Plugin Configuration"
-msgstr "Disk插件配置"
+msgstr "Disk 插件配置"
 
 msgid "Disk Space Usage"
 msgstr "磁盘空间使用情况"
@@ -127,31 +142,31 @@ msgid "Display timespan »"
 msgstr "显示时间段"
 
 msgid "E-Mail Plugin Configuration"
-msgstr "E-Mail插件配置"
+msgstr "E-Mail 插件配置"
 
 msgid "Email"
 msgstr "电子邮件"
 
 msgid "Empty value = monitor all"
-msgstr ""
+msgstr "留空 = 监控所有"
 
 msgid "Enable this plugin"
 msgstr "启用该插件"
 
 msgid "Entropy"
-msgstr ""
+msgstr ""
 
 msgid "Entropy Plugin Configuration"
-msgstr ""
+msgstr "熵值插件配置"
 
 msgid "Exec"
 msgstr "Exec"
 
 msgid "Exec Plugin Configuration"
-msgstr "Exec插件配置"
+msgstr "Exec 插件配置"
 
 msgid "Filter class monitoring"
-msgstr "Filter类监测"
+msgstr "Filter 类监测"
 
 msgid "Firewall"
 msgstr "防火墙"
@@ -163,13 +178,13 @@ msgid "Forwarding between listen and server addresses"
 msgstr "转发监听服务器和应用服务器之间数据"
 
 msgid "Gather compression statistics"
-msgstr ""
+msgstr "收集压缩统计信息"
 
 msgid "General plugins"
-msgstr ""
+msgstr "通用插件"
 
 msgid "Generate a separate graph for each logged user"
-msgstr ""
+msgstr "为每个记录的用户生成一个单独的图表"
 
 msgid "Graphs"
 msgstr "图表"
@@ -181,7 +196,7 @@ msgid ""
 "Here you can define external commands which will be started by collectd in "
 "order to read certain values. The values will be read from stdout."
 msgstr ""
-"在这里,你可以定义外部命令,Collectd将启动命令来获取某些值,将获取的值从标准"
+"在这里,您可以定义外部命令,Collectd 将启动命令来获取某些值,将获取的值从标准"
 "输出端口输出。"
 
 msgid ""
@@ -189,16 +204,16 @@ msgid ""
 "certain threshold values have been reached. The values leading to invokation "
 "will be feeded to the the called programs stdin."
 msgstr ""
-"在这里,你可以定义外部命令,当Collectd达到一定阈值时,将启动命令。阀值将会作"
-"为命令的标准输入。"
+"在这里,您可以定义外部命令,当 Collectd 达到一定阈值时,将启动命令。阀值将会"
+"ä½\9c为å\91½ä»¤ç\9a\84æ \87å\87\86è¾\93å\85¥ã\80\82"
 
 msgid ""
 "Here you can define various criteria by which the monitored iptables rules "
 "are selected."
-msgstr "在这里,你可以定义各种监控iptables规则临界值。"
+msgstr "在这里,您可以定义各种监控 iptables 规则临界值。"
 
 msgid "Hold Ctrl to select multiple items or to deselect entries."
-msgstr ""
+msgstr "按住 Ctrl 键来选择或取消选择多个项目。"
 
 msgid "Host"
 msgstr "主机"
@@ -207,10 +222,10 @@ msgid "Hostname"
 msgstr "主机名"
 
 msgid "IP or hostname where to get the txtinfo output from"
-msgstr "获取txtinfo输出的IP地址或主机名"
+msgstr "获取 txtinfo 输出的 IP 地址或主机名"
 
 msgid "IRQ Plugin Configuration"
-msgstr "IRQ插件配置"
+msgstr "IRQ 插件配置"
 
 msgid "Ignore source addresses"
 msgstr "忽略源地址"
@@ -219,7 +234,7 @@ msgid "Incoming interface"
 msgstr "入接口"
 
 msgid "Interface Plugin Configuration"
-msgstr "Interface插件配置"
+msgstr "Interface 插件配置"
 
 msgid "Interfaces"
 msgstr "Interfaces"
@@ -228,10 +243,10 @@ msgid "Interrupts"
 msgstr "中断"
 
 msgid "Interval for pings"
-msgstr "ping间隙"
+msgstr "ping 间隙"
 
 msgid "Iptables Plugin Configuration"
-msgstr "Iptables插件配置"
+msgstr "Iptables 插件配置"
 
 msgid "Leave unselected to automatically determine interfaces to monitor."
 msgstr "自动保留对未选中接口的监控。"
@@ -246,12 +261,12 @@ msgid "Listener interfaces"
 msgstr "监听接口"
 
 msgid "Load Plugin Configuration"
-msgstr "Load插件配置"
+msgstr "Load 插件配置"
 
 msgid ""
 "Max values for a period can be used instead of averages when not using 'only "
 "average RRAs'"
-msgstr ""
+msgstr "在不使用“仅平均 RRA”的情况下,可以使用一段时间的最大值而不是平均值"
 
 msgid "Maximum allowed connections"
 msgstr "最大允许连接数"
@@ -269,10 +284,10 @@ msgid "Monitor all local listen ports"
 msgstr "监测所有本地监听端口"
 
 msgid "Monitor all sensors"
-msgstr ""
+msgstr "监控所有传感器"
 
 msgid "Monitor device(s) / thermal zone(s)"
-msgstr ""
+msgstr "监控设备/温感区域"
 
 msgid "Monitor devices"
 msgstr "监测设备"
@@ -283,6 +298,9 @@ msgstr "监测磁盘和分区"
 msgid "Monitor filesystem types"
 msgstr "监测文件系统类型"
 
+msgid "Monitor host"
+msgstr "监测主机"
+
 msgid "Monitor hosts"
 msgstr "监测主机"
 
@@ -311,24 +329,26 @@ msgid "Netlink"
 msgstr "Netlink"
 
 msgid "Netlink Plugin Configuration"
-msgstr "Netlink插件配置"
+msgstr "Netlink 插件配置"
 
 msgid "Network"
 msgstr "Network"
 
 msgid "Network Plugin Configuration"
-msgstr "Network插件配置"
+msgstr "Network 插件配置"
 
 msgid "Network plugins"
-msgstr "Network插件"
+msgstr "Network 插件"
 
 msgid "Network protocol"
-msgstr "Network协议"
+msgstr "Network 协议"
 
 msgid ""
 "Note: as pages are rendered by user 'nobody', the *.rrd files, the storage "
 "directory and all its parent directories need to be world readable."
 msgstr ""
+"注意:由于页面是以 'nobody' 身份生成的,因此 *.rrd 文件以及包含此文件的所有父"
+"目录必须全局可读。"
 
 msgid "Number of threads for data collection"
 msgstr "收集程序使用线程数"
@@ -337,19 +357,19 @@ msgid "OLSRd"
 msgstr "OLSRd"
 
 msgid "OLSRd Plugin Configuration"
-msgstr "OLSRd插件配置"
+msgstr "OLSRd 插件配置"
 
 msgid "Only create average RRAs"
-msgstr "仅创建平均RRAs"
+msgstr "仅创建平均 RRAs"
 
 msgid "OpenVPN"
-msgstr ""
+msgstr "OpenVPN"
 
 msgid "OpenVPN Plugin Configuration"
-msgstr ""
+msgstr "OpenVPN 插件配置"
 
 msgid "OpenVPN status files"
-msgstr ""
+msgstr "OpenVPN 状态文件"
 
 msgid "Options"
 msgstr "选项"
@@ -358,17 +378,20 @@ msgid "Outgoing interface"
 msgstr "出接口"
 
 msgid "Output plugins"
-msgstr "Output插件"
+msgstr "Output 插件"
 
 msgid "Ping"
 msgstr "Ping"
 
 msgid "Ping Plugin Configuration"
-msgstr "Ping插件配置"
+msgstr "Ping 插件配置"
 
 msgid "Port"
 msgstr "端口"
 
+msgid "Port for apcupsd communication"
+msgstr "apcupsd 通信端口"
+
 msgid "Processes"
 msgstr "进程"
 
@@ -382,22 +405,22 @@ msgid "Processor"
 msgstr "处理器"
 
 msgid "Qdisc monitoring"
-msgstr "Qdisc监测"
+msgstr "Qdisc 监测"
 
 msgid "RRD XFiles Factor"
-msgstr "RRD XFiles因子"
+msgstr "RRD XFiles 因子"
 
 msgid "RRD heart beat interval"
-msgstr "RRD心跳间隙"
+msgstr "RRD 心跳间隙"
 
 msgid "RRD step interval"
-msgstr "RRD区间间隙"
+msgstr "RRD 区间间隙"
 
 msgid "RRDTool"
 msgstr "RRDTool"
 
 msgid "RRDTool Plugin Configuration"
-msgstr "RRDTool插件配置"
+msgstr "RRDTool 插件配置"
 
 msgid "Rows per RRA"
 msgstr "行/RRA"
@@ -409,13 +432,13 @@ msgid "Seconds"
 msgstr "秒"
 
 msgid "Sensor list"
-msgstr ""
+msgstr "传感器列表"
 
 msgid "Sensors"
-msgstr ""
+msgstr "传感器"
 
 msgid "Sensors Plugin Configuration"
-msgstr ""
+msgstr "Sensors 插件配置"
 
 msgid "Server host"
 msgstr "服务器主机"
@@ -424,13 +447,13 @@ msgid "Server port"
 msgstr "服务器端口"
 
 msgid "Setup"
-msgstr ""
+msgstr "设置"
 
 msgid "Shaping class monitoring"
 msgstr "整形类监控"
 
 msgid "Show max values instead of averages"
-msgstr ""
+msgstr "显示最大值而不是平均值"
 
 msgid "Socket file"
 msgstr "套接字文件"
@@ -442,7 +465,7 @@ msgid "Socket permissions"
 msgstr "套接字权限"
 
 msgid "Source ip range"
-msgstr "源IP区间"
+msgstr "源 IP 区间"
 
 msgid "Specifies what information to collect about links."
 msgstr "收集指定链接相关信息。"
@@ -454,10 +477,10 @@ msgid "Specifies what information to collect about the global topology."
 msgstr "收集指定拓扑相关信息。"
 
 msgid "Splash Leases"
-msgstr ""
+msgstr "Splash Leases"
 
 msgid "Splash Leases Plugin Configuration"
-msgstr ""
+msgstr "Splash Leases 插件配置"
 
 msgid "Statistics"
 msgstr "统计"
@@ -466,7 +489,7 @@ msgid "Storage directory"
 msgstr "存储目录"
 
 msgid "Storage directory for the csv files"
-msgstr "csv存储目录"
+msgstr "csv 存储目录"
 
 msgid "Store data values as rates instead of absolute values"
 msgstr "存储数据值变化量而不是绝对值"
@@ -478,40 +501,43 @@ msgid "System Load"
 msgstr "系统加载"
 
 msgid "TCP Connections"
-msgstr "TCP连接数"
+msgstr "TCP 连接数"
 
 msgid "TCPConns Plugin Configuration"
-msgstr "TCPConns插件配置"
+msgstr "TCPConns 插件配置"
 
 msgid "TTL for network packets"
-msgstr "网络包TTL"
+msgstr "网络包 TTL"
 
 msgid "TTL for ping packets"
-msgstr "pingTTL"
+msgstr "ping 包 TTL"
 
 msgid "Table"
 msgstr "表"
 
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr "APCUPS 插件收集 APC UPS 的统计信息。"
+
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
-msgstr "NUT插件读取UPS信息。"
+msgstr "NUT 插件读取 UPS 信息。"
 
 msgid ""
 "The OLSRd plugin reads information about meshed networks from the txtinfo "
 "plugin of OLSRd."
-msgstr "OLSRd插件通过txtinfo获取meshed网络信息。"
+msgstr "OLSRd 插件通过 txtinfo 获取 meshed 网络信息。"
 
 msgid ""
 "The OpenVPN plugin gathers information about the current vpn connection "
 "status."
-msgstr ""
+msgstr "OpenVPN 插件可以获取 VPN 连接当前状态"
 
 msgid ""
 "The conntrack plugin collects statistics about the number of tracked "
 "connections."
-msgstr "conntrack插件获取连接数信息。"
+msgstr "conntrack 插件获取连接数信息。"
 
 msgid "The cpu plugin collects basic statistics about the processor usage."
-msgstr "cpu插件获取处理器相关信息。"
+msgstr "cpu 插件获取处理器相关信息。"
 
 msgid ""
 "The csv plugin stores collected data in csv file format for further "
@@ -521,17 +547,17 @@ msgstr "csv插件用于存储数据,以方便其他程序处理数据。"
 msgid ""
 "The df plugin collects statistics about the disk space usage on different "
 "devices, mount points or filesystem types."
-msgstr "df插件收集磁盘空间使用情况,挂载点及文件系统相关信息。"
+msgstr "df 插件收集磁盘空间使用情况、挂载点及文件系统相关信息。"
 
 msgid ""
 "The disk plugin collects detailled usage statistics for selected partitions "
 "or whole disks."
-msgstr "disk插件收集磁盘分区使用情况及相关信息。"
+msgstr "disk 插件收集磁盘分区使用情况及相关信息。"
 
 msgid ""
 "The dns plugin collects detailled statistics about dns related traffic on "
 "selected interfaces."
-msgstr "dns插件收集dns数据流相关信息。"
+msgstr "dns 插件收集 dns 数据流相关信息。"
 
 msgid ""
 "The email plugin creates a unix socket which can be used to transmit email-"
@@ -539,50 +565,50 @@ msgid ""
 "to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can "
 "be used in other ways as well."
 msgstr ""
-"邮件插件创建一个unix套接字用于为Collectd守护进程发送统计信息到电子邮件系统。"
-"这个插件主要目的是结合使用Mail::SpamAssasin::Pulgin::Collectd,但可以用在其他"
-"方面。"
+"邮件插件创建一个 unix 套接字用于为 Collectd 守护进程发送统计信息到电子邮件系"
+"统。这个插件主要目的是结合使用 Mail::SpamAssasin::Pulgin::Collectd,但可以用"
+"在其他方面。"
 
 msgid "The entropy plugin collects statistics about the available entropy."
-msgstr ""
+msgstr "entropy 插件收集可用熵的统计信息。"
 
 msgid ""
 "The exec plugin starts external commands to read values from or to notify "
 "external processes when certain threshold values have been reached."
 msgstr ""
-"exec插件,用于当某些监控值已到达阈值时,启动外部命令读值或通知外部程序。"
+"exec 插件用于当某些监控值已到达阈值时,启动外部命令读值或通知外部程序。"
 
 msgid ""
 "The interface plugin collects traffic statistics on selected interfaces."
-msgstr "Interface插件,用于收集选定接口的数据包的统计信息。"
+msgstr "Interface 插件用于收集选定接口的数据包的统计信息。"
 
 msgid ""
 "The iptables plugin will monitor selected firewall rules and collect "
 "informations about processed bytes and packets per rule."
-msgstr "iptables插件,将监测选定防火墙规则和收集关于每个规则处理的数据包信息。"
+msgstr "iptables 插件将监测选定防火墙规则和收集关于每个规则处理的数据包信息。"
 
 msgid ""
 "The irq plugin will monitor the rate of issues per second for each selected "
 "interrupt. If no interrupt is selected then all interrupts are monitored."
 msgstr ""
-"irq插件,用于监控选定中断的每秒钟产生的中断数。如果没有中断被选中,则表示对所"
+"irq 插件用于监控选定中断的每秒钟产生的中断数。如果没有中断被选中,则表示对所"
 "有中断进行监测。"
 
 msgid ""
 "The iwinfo plugin collects statistics about wireless signal strength, noise "
 "and quality."
-msgstr "iwinfo插件,收集无线信号强度、噪声和质量的统计信息。"
+msgstr "iwinfo 插件收集无线信号强度、噪声和质量的统计信息。"
 
 msgid "The load plugin collects statistics about the general system load."
-msgstr "load插件,收集常规系统加载统计信息。"
+msgstr "load 插件收集常规系统加载统计信息。"
 
 msgid "The memory plugin collects statistics about the memory usage."
-msgstr "memory插件,收集关于内存使用情况的统计信息。"
+msgstr "memory 插件收集关于内存使用情况的统计信息。"
 
 msgid ""
 "The netlink plugin collects extended informations like qdisc-, class- and "
 "filter-statistics for selected interfaces."
-msgstr "netlink插件,收集为选定接口qdisc-、class-和filter- 的扩展数据。"
+msgstr "netlink 插件收集为选定接口 qdisc-、class- 和 filter- 的扩展数据。"
 
 msgid ""
 "The network plugin provides network based communication between different "
@@ -590,19 +616,19 @@ msgid ""
 "client mode locally collected data is transferred to a collectd server "
 "instance, in server mode the local instance receives data from other hosts."
 msgstr ""
-"network插件,提供了基于网络的不同Collectd实例。Collectd可以工作在客户端和服务"
-"å\99¨ä¸¤ä¸ªæ¨¡å¼\8fã\80\82å\9c¨å®¢æ\88·ç«¯æ¨¡å¼\8fä¸\8bæ\94¶é\9b\86æ\9c¬å\9c°ä¿¡æ\81¯ï¼\8cç\84¶å\90\8e转移å\88°ä¸\80个Collectdæ\9c\8då\8a¡å\99¨å®\9eä¾\8b中,å\9c¨"
-"服务器模式将从其他主机收集信息。"
+"network 插件提供了基于网络的不同 Collectd 实例。Collectd 可以工作在客户端和服"
+"å\8a¡å\99¨ä¸¤ä¸ªæ¨¡å¼\8fã\80\82å\9c¨å®¢æ\88·ç«¯æ¨¡å¼\8fä¸\8bæ\94¶é\9b\86æ\9c¬å\9c°ä¿¡æ\81¯ï¼\8cç\84¶å\90\8e转移å\88°ä¸\80个 Collectd æ\9c\8då\8a¡å\99¨å®\9eä¾\8b"
+"中,在服务器模式将从其他主机收集信息。"
 
 msgid ""
 "The ping plugin will send icmp echo replies to selected hosts and measure "
 "the roundtrip time for each host."
-msgstr "ping插件,将发送icmp echo replies到选定主机来测量每台主机的响应时间。"
+msgstr "ping 插件将发送 icmp echo replies 到选定主机来测量每台主机的响应时间。"
 
 msgid ""
 "The processes plugin collects informations like cpu time, page faults and "
 "memory usage of selected processes."
-msgstr "processes插件,收集选定进程的cpu时间、页面错误和内存使用信息。"
+msgstr "processes 插件收集选定进程的 cpu 时间、页面错误和内存使用信息。"
 
 msgid ""
 "The rrdtool plugin stores the collected data in rrd database files, the "
@@ -610,62 +636,70 @@ msgid ""
 "values will result in a very high memory consumption in the temporary "
 "directory. This can render the device unusable!</strong>"
 msgstr ""
-"rrdtool插件,将收集数据以图表的形式储存在RRD数据库文件中。<br /><br /"
+"rrdtool 插件将收集数据以图表的形式储存在 RRD 数据库文件中。<br /><br /"
 "><strong>警告:错误的参数设置,将导致非常高的临时内存消耗。这可能会使设备无法"
 "使用!</strong>"
 
 msgid ""
 "The sensors plugin uses the Linux Sensors framework to gather environmental "
 "statistics."
-msgstr ""
+msgstr "sensors 插件使用 Linux Sensors 框架来收集环境统计信息。"
 
 msgid ""
 "The splash leases plugin uses libuci to collect statistics about splash "
 "leases."
-msgstr ""
+msgstr "splash leases 插件使用 libuci 来收集 splash leases 的统计信息。"
 
 msgid ""
 "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
 "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
 "render diagram images."
 msgstr ""
+"Statistics 软件包使用 <a href=\"https://collectd.org/\">Collectd</a> 来收集数"
+"据,并用 <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> 生成统计图"
+"表。"
 
 msgid ""
 "The tcpconns plugin collects informations about open tcp connections on "
 "selected ports."
-msgstr "tcpconns插件,收集选定端口TCP连接信息。"
+msgstr "tcpconns 插件收集选定端口 TCP 连接信息。"
 
 msgid ""
 "The thermal plugin will monitor temperature of the system. Data is typically "
 "read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be "
 "read, e.g. thermal_zone1 )"
 msgstr ""
+"thermal 插件将会监控系统温度。数据主要取自 /sys/class/thermal/*/temp ('*' 表"
+"示温感设备的名字,比如 thermal_zone1) 。"
 
 msgid ""
 "The unixsock plugin creates a unix socket which can be used to read "
 "collected data from a running collectd instance."
-msgstr "unixsock插件,创建一个unix套接字可用于读取Collectd实例的收集信息。"
+msgstr "unixsock 插件创建一个 unix 套接字可用于读取 Collectd 实例的收集信息。"
 
 msgid "The uptime plugin collects statistics about the uptime of the system."
-msgstr ""
+msgstr "uptime 插件收集系统启动时间的统计信息。"
 
 msgid "Thermal"
-msgstr ""
+msgstr "温感"
 
 msgid "Thermal Plugin Configuration"
-msgstr ""
+msgstr "温感插件配置"
+
+msgid "This plugin collects statistics about the processor context switches."
+msgstr "此插件收集处理器上下文切换的统计信息。"
 
 msgid "This plugin collects statistics about the processor frequency scaling."
-msgstr ""
+msgstr "此插件收集处理器频率调整的统计信息。"
 
 msgid ""
 "This section defines on which interfaces collectd will wait for incoming "
 "connections."
-msgstr "定义Collectd将监听哪个接口来传入连接收集数据。"
+msgstr "定义 Collectd 将监听哪个接口来传入连接收集数据。"
 
 msgid ""
 "This section defines to which servers the locally collected data is sent to."
-msgstr "定义本地收集数据被发送到哪台Collected服务器。"
+msgstr "定义本地收集数据被发送到哪台 Collected 服务器。"
 
 msgid "Try to lookup fully qualified hostname"
 msgstr "尝试解析主机全域名"
@@ -674,28 +708,28 @@ msgid "UPS"
 msgstr "UPS"
 
 msgid "UPS Plugin Configuration"
-msgstr "UPS插件配置"
+msgstr "UPS 插件配置"
 
 msgid "UPS name in NUT ups@host format"
-msgstr "UPS名使用NUT(Network UPS Tools)格式:ups@host"
+msgstr "UPS 名使用 NUT(Network UPS Tools)格式:ups@host"
 
 msgid "UnixSock"
 msgstr "UnixSock"
 
 msgid "Unixsock Plugin Configuration"
-msgstr "Unixsock插件配置"
+msgstr "Unixsock 插件配置"
 
 msgid "Uptime"
-msgstr ""
+msgstr "运行时间"
 
 msgid "Uptime Plugin Configuration"
-msgstr ""
+msgstr "运行时间插件配置"
 
 msgid "Use improved naming schema"
-msgstr ""
+msgstr "使用更高级的命名规则"
 
 msgid "Used PID file"
-msgstr "正在使用的PID文件"
+msgstr "正在使用的 PID 文件"
 
 msgid "User"
 msgstr "用户"
@@ -707,11 +741,11 @@ msgid "Wireless"
 msgstr "无线"
 
 msgid "Wireless iwinfo Plugin Configuration"
-msgstr "无线iwinfo插件配置"
+msgstr "无线 iwinfo 插件配置"
 
 msgid ""
 "You can install additional collectd-mod-* plugins to enable more statistics."
-msgstr ""
+msgstr "您可以安装更多的 collectd-mod-* 插件以获得更多的统计数据。"
 
 msgid "e.g. br-ff"
 msgstr "例如:br-ff"
@@ -723,10 +757,10 @@ msgid "e.g. reject-with tcp-reset"
 msgstr "例如:eject-with tcp-reset"
 
 msgid "max. 16 chars"
-msgstr "最长16个字符"
+msgstr "最长 16 个字符"
 
 msgid "reduces rrd size"
-msgstr "减少rrd大小"
+msgstr "减少 rrd 大小"
 
 msgid "seconds; multiple separated by space"
 msgstr "秒数;多个使用空格分隔"
index 9245260..ad5eb5b 100644 (file)
 #  rrdtool.pot
 #  generated from ./applications/luci-statistics/luasrc/i18n/rrdtool.en.lua
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
-"Content-Type: text/plain; charset=ASCII\n"
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-10-29 15:39+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Language: zh_TW\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: Gtranslator 2.91.7\n"
+"POT-Creation-Date: \n"
 
 #. %H: Wireless - Signal Noise Ratio
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:1
 msgid "stat_dg_title_wireless__signal_noise"
-msgstr ""
+msgstr "無線訊號噪音"
 
 #. dBm
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:2
 msgid "stat_dg_label_wireless__signal_noise"
-msgstr ""
+msgstr "信噪比"
 
 #. Noise Level
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:3
 msgid "stat_ds_signal_noise"
-msgstr ""
+msgstr "訊號噪音"
 
 #. Signal Strength
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:4
 msgid "stat_ds_signal_power"
-msgstr ""
+msgstr "訊號強度"
 
 #. %H: Wireless - Signal Quality
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:5
 msgid "stat_dg_title_wireless__signal_quality"
-msgstr ""
+msgstr "%H:無線 - 訊號質量"
 
 #. n
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:6
 msgid "stat_dg_label_wireless__signal_quality"
-msgstr ""
+msgstr "n"
 
 #. Signal Quality
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:7
 msgid "stat_ds_signal_quality"
-msgstr ""
+msgstr "訊號質量"
 
 #. %H: ICMP Roundtrip Times
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:8
 msgid "stat_dg_title_ping"
-msgstr ""
+msgstr "%H:ICMP 往返時間"
 
 #. ms
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:9
 msgid "stat_dg_label_ping"
-msgstr ""
+msgstr "響應"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:10
 msgid "stat_ds_ping"
-msgstr ""
+msgstr "%di"
 
 #. %H: Firewall - Processed Packets
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:11
 msgid "stat_dg_title_iptables__ipt_packets"
-msgstr ""
+msgstr "%H:防火牆 - 已處理的資料包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:12
 msgid "stat_dg_label_iptables__ipt_packets"
-msgstr ""
+msgstr "包/s"
 
 #. Chain \"%di\"
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:13
 msgid "stat_ds_ipt_packets"
-msgstr ""
+msgstr "鏈“%di”"
 
 #. %H: Netlink - Transfer on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:14
 msgid "stat_dg_title_netlink__if_octets"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的資料傳輸"
 
 #. Bytes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:15
 msgid "stat_dg_label_netlink__if_octets"
-msgstr ""
+msgstr "位元組/秒"
 
 #. Bytes (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:16
 msgid "stat_ds_if_octets"
-msgstr ""
+msgstr "位元組 (%ds)"
 
 #. %H: Netlink - Packets on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:17
 msgid "stat_dg_title_netlink__if_packets"
-msgstr ""
+msgstr "%H:Netlink - %pi 的資料包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:18
 msgid "stat_dg_label_netlink__if_packets"
-msgstr ""
+msgstr "包/s"
 
 #. Processed (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:19
 msgid "stat_ds_if_packets"
-msgstr ""
+msgstr "已處理 (%ds)"
 
 #. Dropped   (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:20
 msgid "stat_ds_if_dropped"
-msgstr ""
+msgstr "丟棄 (%ds)"
 
 #. Errors    (%ds)
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:21
 msgid "stat_ds_if_errors"
-msgstr ""
+msgstr "錯誤 (%ds)"
 
 #. %H: Netlink - Multicast on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:22
 msgid "stat_dg_title_netlink__if_multicast"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的多播"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:23
 msgid "stat_dg_label_netlink__if_multicast"
-msgstr ""
+msgstr "包/s"
 
 #. Packets
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:24
 msgid "stat_ds_if_multicast"
-msgstr ""
+msgstr "資料包"
 
 #. %H: Netlink - Collisions on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:25
 msgid "stat_dg_title_netlink__if_collisions"
-msgstr ""
+msgstr "%H:Netlink - %pi 上的 Collisions"
 
 #. Collisions/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:26
 msgid "stat_dg_label_netlink__if_collisions"
-msgstr ""
+msgstr "碰撞/s"
 
 #. Collisions
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:27
 msgid "stat_ds_if_collisions"
-msgstr ""
+msgstr "碰撞"
 
 #. %H: Netlink - Errors on %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:28
 msgid "stat_dg_title_netlink__if_tx_errors"
-msgstr ""
+msgstr "%H:Netlink - %pi 上發生的錯誤"
 
 #. Errors/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:29
 msgid "stat_dg_label_netlink__if_tx_errors"
-msgstr ""
+msgstr "錯誤/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:30
 msgid "stat_ds_if_tx_errors"
-msgstr ""
+msgstr "%di"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:31
 msgid "stat_ds_if_rx_errors"
-msgstr ""
+msgstr "%di"
 
 #. %H: Processes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:32
 msgid "stat_dg_title_processes"
-msgstr ""
+msgstr "%H:程序"
 
 #. Processes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:33
 msgid "stat_dg_label_processes"
-msgstr ""
+msgstr "程序/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:34
 msgid "stat_ds_ps_state"
-msgstr ""
+msgstr "%di"
 
 #. %H: Process %pi - used cpu time
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:35
 msgid "stat_dg_title_processes__ps_cputime"
-msgstr ""
+msgstr "%H:程序 %s - 佔用的 CPU 時間"
 
 #. Jiffies
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:36
 msgid "stat_dg_label_processes__ps_cputime"
-msgstr ""
+msgstr "Jiffies"
 
 #. system
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:37
 msgid "stat_ds_ps_cputime__syst"
-msgstr ""
+msgstr "系統"
 
 #. user
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:38
 msgid "stat_ds_ps_cputime__user"
-msgstr ""
+msgstr "使用者"
 
 #. %H: Process %pi - threads and processes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:39
 msgid "stat_dg_title_processes__ps_count"
-msgstr ""
+msgstr "%H:程序 %pi - 程序與執行緒"
 
 #. Count
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:40
 msgid "stat_dg_label_processes__ps_count"
-msgstr ""
+msgstr ""
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:41
 msgid "stat_ds_ps_count"
-msgstr ""
+msgstr "%ds"
 
 #. %H: Process %pi - page faults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:42
 msgid "stat_dg_title_processes__ps_pagefaults"
-msgstr ""
+msgstr "%H:程序 %pi - 分頁錯誤"
 
 #. Pagefaults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:43
 msgid "stat_dg_label_processes__ps_pagefaults"
-msgstr ""
+msgstr "分頁錯誤"
 
 #. page faults
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:44
 msgid "stat_ds_ps_pagefaults"
-msgstr ""
+msgstr "分頁錯誤"
 
 #. %H: Process %pi - virtual memory size
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:45
 msgid "stat_dg_title_processes__ps_rss"
-msgstr ""
+msgstr "%H:程序 %pi - 虛擬記憶體大小"
 
 #. Bytes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:46
 msgid "stat_dg_label_processes__ps_rss"
-msgstr ""
+msgstr "位元組"
 
 #. virtual memory
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:47
 msgid "stat_ds_ps_rss"
-msgstr ""
+msgstr "虛擬記憶體"
 
 #. %H: Usage on Processor #%pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:48
 msgid "stat_dg_title_cpu"
-msgstr ""
+msgstr "%H:對處理器 #%pi 的佔用"
 
 #. %
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:49
 msgid "stat_dg_label_cpu"
-msgstr ""
+msgstr "%"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:50
 msgid "stat_ds_cpu"
-msgstr ""
+msgstr "%di"
 
 #. %H: Transfer on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:51
 msgid "stat_dg_title_interface__if_octets"
-msgstr ""
+msgstr "%H:%di 上的資料傳輸情況"
 
 #. Bytes/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:52
 msgid "stat_dg_label_interface__if_octets"
-msgstr ""
+msgstr "位元組/秒"
 
 #. %H: Packets on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:53
 msgid "stat_dg_title_interface__if_packets"
-msgstr ""
+msgstr "%H:%di 上的資料包"
 
 #. Packets/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:54
 msgid "stat_dg_label_interface__if_packets"
-msgstr ""
+msgstr "包/s"
 
 #. %H: TCP-Connections to Port %pi
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:55
 msgid "stat_dg_title_tcpconns"
-msgstr ""
+msgstr "%H:到埠 %pi 的 TCP 連線"
 
 #. Connections/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:56
 msgid "stat_dg_label_tcpconns"
-msgstr ""
+msgstr "連線/秒"
 
 #. %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:57
 msgid "stat_ds_tcp_connections"
-msgstr ""
+msgstr "%di"
 
 #. %H: Disk Space Usage on %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:58
 msgid "stat_dg_title_df"
-msgstr ""
+msgstr "%H:%di 上的磁碟佔用情況"
 
 #. Bytes
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:59
 msgid "stat_dg_label_df"
-msgstr ""
+msgstr "位元組"
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:60
 msgid "stat_ds_df__free"
-msgstr ""
+msgstr "%ds"
 
 #. %ds
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:61
 msgid "stat_ds_df__used"
-msgstr ""
+msgstr "%ds"
 
 #. %H: Interrupts
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:62
 msgid "stat_dg_title_irq"
-msgstr ""
+msgstr "%H:中斷"
 
 #. Issues/s
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:63
 msgid "stat_dg_label_irq"
-msgstr ""
+msgstr "中斷/s"
 
 #. IRQ %di
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:64
 msgid "stat_ds_irq"
-msgstr ""
+msgstr "IRQ %di"
 
 #. %H: System Load
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:65
 msgid "stat_dg_title_load"
-msgstr ""
+msgstr "%H:系統負載"
 
 #. Load
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:66
 msgid "stat_dg_label_load"
-msgstr ""
+msgstr "負載"
 
 #. 1 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:67
 msgid "stat_ds_load__shortterm"
-msgstr ""
+msgstr "1 分鐘"
 
 #. 5 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:68
 msgid "stat_ds_load__midterm"
-msgstr ""
+msgstr "5 分鐘"
 
 #. 15 min
 #: applications/luci-statistics/luasrc/i18n/rrdtool.en.lua:69
 msgid "stat_ds_load__longterm"
-msgstr ""
+msgstr "15 分鐘"
index f9e72b5..73c9d7b 100644 (file)
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 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"
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2009-06-10 03:40+0200\n"
+"PO-Revision-Date: 2017-10-29 15:50+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language: zh_TW\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: Gtranslator 2.91.7\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+
+msgid "APC UPS"
+msgstr "APC UPS"
+
+msgid "APCUPS Plugin Configuration"
+msgstr "APCUPS 外掛配置"
 
 msgid "Action (target)"
-msgstr ""
+msgstr "動作(目標)"
 
 msgid "Add command for reading values"
-msgstr ""
+msgstr "新增命令讀取資料"
 
 msgid "Add matching rule"
-msgstr ""
+msgstr "新增匹配規則"
 
 msgid "Add multiple hosts separated by space."
-msgstr ""
+msgstr "使用空格分隔多個主機"
 
 msgid "Add notification command"
-msgstr ""
+msgstr "新增通知命令"
 
 msgid "Aggregate number of connected users"
-msgstr ""
+msgstr "連線使用者總數"
 
 msgid "Base Directory"
-msgstr ""
+msgstr "基本目錄"
 
 msgid "Basic monitoring"
-msgstr ""
+msgstr "基本監控"
+
+msgid "CPU Context Switches Plugin Configuration"
+msgstr "CPU Context Switches 外掛配置"
 
 msgid "CPU Frequency"
-msgstr ""
+msgstr "CPU 頻率"
 
 msgid "CPU Frequency Plugin Configuration"
-msgstr ""
+msgstr "CPU 頻率外掛配置"
 
 msgid "CPU Plugin Configuration"
-msgstr ""
+msgstr "CPU 外掛配置"
 
 msgid "CSV Output"
-msgstr ""
+msgstr "CSV 輸出"
 
 msgid "CSV Plugin Configuration"
-msgstr ""
+msgstr "CSV 外掛配置"
 
 msgid "Cache collected data for"
-msgstr ""
+msgstr "收集快取資料"
 
 msgid "Cache flush interval"
-msgstr ""
+msgstr "快取清空間隙"
 
 msgid "Chain"
-msgstr ""
+msgstr ""
 
 msgid "CollectLinks"
-msgstr ""
+msgstr "收集連結"
 
 msgid "CollectRoutes"
-msgstr ""
+msgstr "收集路由"
 
 msgid "CollectTopology"
-msgstr ""
+msgstr "收集拓撲"
 
 msgid "Collectd Settings"
-msgstr ""
+msgstr "Collectd 設定"
 
 msgid ""
 "Collectd is a small daemon for collecting data from various sources through "
 "different plugins. On this page you can change general settings for the "
 "collectd daemon."
 msgstr ""
+"Collectd 是一個通過不同外掛用於收集各種源資料的小型守護程式。在此頁面中,您可"
+"以更改 Collectd 守護程序常規設定。"
 
 msgid "Conntrack"
-msgstr ""
+msgstr "Conntrack"
 
 msgid "Conntrack Plugin Configuration"
-msgstr ""
+msgstr "Conntrack 外掛配置"
+
+msgid "Context Switches"
+msgstr "上下文切換"
 
 msgid "DF Plugin Configuration"
-msgstr ""
+msgstr "DF 外掛配置"
 
 msgid "DNS"
-msgstr ""
+msgstr "DNS"
 
 msgid "DNS Plugin Configuration"
-msgstr ""
+msgstr "DNS 外掛配置"
 
 msgid "Data collection interval"
-msgstr ""
+msgstr "資料收集間隙"
 
 msgid "Datasets definition file"
-msgstr ""
+msgstr "資料集定義檔案"
 
 msgid "Destination ip range"
-msgstr ""
+msgstr "目標 IP 區間"
 
 msgid "Directory for collectd plugins"
-msgstr ""
+msgstr "Collectd 外掛目錄"
 
 msgid "Directory for sub-configurations"
-msgstr ""
+msgstr "子配置目錄"
 
 msgid "Disk Plugin Configuration"
-msgstr ""
+msgstr "Disk 外掛配置"
 
 msgid "Disk Space Usage"
-msgstr ""
+msgstr "磁碟空間使用情況"
 
 msgid "Disk Usage"
-msgstr ""
+msgstr "磁碟使用情況"
 
 msgid "Display Host »"
-msgstr ""
+msgstr "顯示主機"
 
 msgid "Display timespan »"
-msgstr ""
+msgstr "顯示時間段"
 
 msgid "E-Mail Plugin Configuration"
-msgstr ""
+msgstr "E-Mail 外掛配置"
 
 msgid "Email"
-msgstr ""
+msgstr "電子郵件"
 
 msgid "Empty value = monitor all"
-msgstr ""
+msgstr "留空 = 監控所有"
 
 msgid "Enable this plugin"
-msgstr ""
+msgstr "啟用該外掛"
 
 msgid "Entropy"
-msgstr ""
+msgstr ""
 
 msgid "Entropy Plugin Configuration"
-msgstr ""
+msgstr "熵值外掛配置"
 
 msgid "Exec"
-msgstr ""
+msgstr "Exec"
 
 msgid "Exec Plugin Configuration"
-msgstr ""
+msgstr "Exec 外掛配置"
 
 msgid "Filter class monitoring"
-msgstr ""
+msgstr "Filter 類監測"
 
 msgid "Firewall"
-msgstr ""
+msgstr "防火牆"
 
 msgid "Flush cache after"
-msgstr ""
+msgstr "清空快取後"
 
 msgid "Forwarding between listen and server addresses"
-msgstr ""
+msgstr "轉發監聽伺服器和應用伺服器之間資料"
 
 msgid "Gather compression statistics"
-msgstr ""
+msgstr "收集壓縮統計資訊"
 
 msgid "General plugins"
-msgstr ""
+msgstr "通用外掛"
 
 msgid "Generate a separate graph for each logged user"
-msgstr ""
+msgstr "為每個記錄的使用者生成一個單獨的圖表"
 
 msgid "Graphs"
-msgstr ""
+msgstr "圖表"
 
 msgid "Group"
-msgstr ""
+msgstr ""
 
 msgid ""
 "Here you can define external commands which will be started by collectd in "
 "order to read certain values. The values will be read from stdout."
 msgstr ""
+"在這裡,您可以定義外部命令,Collectd 將啟動命令來獲取某些值,將獲取的值從標準"
+"輸出埠輸出。"
 
 msgid ""
 "Here you can define external commands which will be started by collectd when "
 "certain threshold values have been reached. The values leading to invokation "
 "will be feeded to the the called programs stdin."
 msgstr ""
+"在這裡,您可以定義外部命令,當 Collectd 達到一定閾值時,將啟動命令。閥值將會"
+"作為命令的標準輸入。"
 
 msgid ""
 "Here you can define various criteria by which the monitored iptables rules "
 "are selected."
-msgstr ""
+msgstr "在這裡,您可以定義各種監控 iptables 規則臨界值。"
 
 msgid "Hold Ctrl to select multiple items or to deselect entries."
-msgstr ""
+msgstr "按住 Ctrl 鍵來選擇或取消選擇多個專案。"
 
 msgid "Host"
-msgstr ""
+msgstr "主機"
 
 msgid "Hostname"
-msgstr ""
+msgstr "主機名"
 
 msgid "IP or hostname where to get the txtinfo output from"
-msgstr ""
+msgstr "獲取 txtinfo 輸出的 IP 位址或主機名"
 
 msgid "IRQ Plugin Configuration"
-msgstr ""
+msgstr "IRQ 外掛配置"
 
 msgid "Ignore source addresses"
-msgstr ""
+msgstr "忽略源位址"
 
 msgid "Incoming interface"
-msgstr ""
+msgstr "入介面"
 
 msgid "Interface Plugin Configuration"
-msgstr ""
+msgstr "Interface 外掛配置"
 
 msgid "Interfaces"
-msgstr ""
+msgstr "Interfaces"
 
 msgid "Interrupts"
-msgstr ""
+msgstr "中斷"
 
 msgid "Interval for pings"
-msgstr ""
+msgstr "ping 間隙"
 
 msgid "Iptables Plugin Configuration"
-msgstr ""
+msgstr "Iptables 外掛配置"
 
 msgid "Leave unselected to automatically determine interfaces to monitor."
-msgstr ""
+msgstr "自動保留對未選中介面的監控。"
 
 msgid "Listen host"
-msgstr ""
+msgstr "監聽主機"
 
 msgid "Listen port"
-msgstr ""
+msgstr "監聽埠"
 
 msgid "Listener interfaces"
-msgstr ""
+msgstr "監聽介面"
 
 msgid "Load Plugin Configuration"
-msgstr ""
+msgstr "Load 外掛配置"
 
 msgid ""
 "Max values for a period can be used instead of averages when not using 'only "
 "average RRAs'"
-msgstr ""
+msgstr "在不使用“僅平均 RRA”的情況下,可以使用一段時間的最大值而不是平均值"
 
 msgid "Maximum allowed connections"
-msgstr ""
+msgstr "最大允許連線數"
 
 msgid "Memory"
-msgstr ""
+msgstr "記憶體"
 
 msgid "Memory Plugin Configuration"
-msgstr ""
+msgstr "記憶體外掛配置"
 
 msgid "Monitor all except specified"
-msgstr ""
+msgstr "監測所有(除特別註明外)"
 
 msgid "Monitor all local listen ports"
-msgstr ""
+msgstr "監測所有本地監聽埠"
 
 msgid "Monitor all sensors"
-msgstr ""
+msgstr "監控所有感測器"
 
 msgid "Monitor device(s) / thermal zone(s)"
-msgstr ""
+msgstr "監控裝置/溫感區域"
 
 msgid "Monitor devices"
-msgstr ""
+msgstr "監測裝置"
 
 msgid "Monitor disks and partitions"
-msgstr ""
+msgstr "監測磁碟和分割槽"
 
 msgid "Monitor filesystem types"
-msgstr ""
+msgstr "監測檔案系統型別"
+
+msgid "Monitor host"
+msgstr "監測主機"
 
 msgid "Monitor hosts"
-msgstr ""
+msgstr "監測主機"
 
 msgid "Monitor interfaces"
-msgstr ""
+msgstr "監測介面"
 
 msgid "Monitor interrupts"
-msgstr ""
+msgstr "監測中斷"
 
 msgid "Monitor local ports"
-msgstr ""
+msgstr "監測本地埠"
 
 msgid "Monitor mount points"
-msgstr ""
+msgstr "監測掛載點"
 
 msgid "Monitor processes"
-msgstr ""
+msgstr "監測程序"
 
 msgid "Monitor remote ports"
-msgstr ""
+msgstr "監測遠端埠"
 
 msgid "Name of the rule"
-msgstr ""
+msgstr "規則名"
 
 msgid "Netlink"
-msgstr ""
+msgstr "Netlink"
 
 msgid "Netlink Plugin Configuration"
-msgstr ""
+msgstr "Netlink 外掛配置"
 
 msgid "Network"
-msgstr ""
+msgstr "Network"
 
 msgid "Network Plugin Configuration"
-msgstr ""
+msgstr "Network 外掛配置"
 
 msgid "Network plugins"
-msgstr ""
+msgstr "Network 外掛"
 
 msgid "Network protocol"
-msgstr ""
+msgstr "Network 協議"
 
 msgid ""
 "Note: as pages are rendered by user 'nobody', the *.rrd files, the storage "
 "directory and all its parent directories need to be world readable."
 msgstr ""
+"注意:由於頁面是以 'nobody' 身份生成的,因此 *.rrd 檔案以及包含此檔案的所有父"
+"目錄必須全域性可讀。"
 
 msgid "Number of threads for data collection"
-msgstr ""
+msgstr "收集程式使用執行緒數"
 
 msgid "OLSRd"
-msgstr ""
+msgstr "OLSRd"
 
 msgid "OLSRd Plugin Configuration"
-msgstr ""
+msgstr "OLSRd 外掛配置"
 
 msgid "Only create average RRAs"
-msgstr ""
+msgstr "僅建立平均 RRAs"
 
 msgid "OpenVPN"
-msgstr ""
+msgstr "OpenVPN"
 
 msgid "OpenVPN Plugin Configuration"
-msgstr ""
+msgstr "OpenVPN 外掛配置"
 
 msgid "OpenVPN status files"
-msgstr ""
+msgstr "OpenVPN 狀態檔案"
 
 msgid "Options"
-msgstr ""
+msgstr "選項"
 
 msgid "Outgoing interface"
-msgstr ""
+msgstr "出介面"
 
 msgid "Output plugins"
-msgstr ""
+msgstr "Output 外掛"
 
 msgid "Ping"
-msgstr ""
+msgstr "Ping"
 
 msgid "Ping Plugin Configuration"
-msgstr ""
+msgstr "Ping 外掛配置"
 
 msgid "Port"
-msgstr ""
+msgstr "埠"
+
+msgid "Port for apcupsd communication"
+msgstr "apcupsd 通訊埠"
 
 msgid "Processes"
-msgstr ""
+msgstr "程序"
 
 msgid "Processes Plugin Configuration"
-msgstr ""
+msgstr "程序外掛配置"
 
 msgid "Processes to monitor separated by space"
-msgstr ""
+msgstr "過程監控,用空格隔開"
 
 msgid "Processor"
-msgstr ""
+msgstr "處理器"
 
 msgid "Qdisc monitoring"
-msgstr ""
+msgstr "Qdisc 監測"
 
 msgid "RRD XFiles Factor"
-msgstr ""
+msgstr "RRD XFiles 因子"
 
 msgid "RRD heart beat interval"
-msgstr ""
+msgstr "RRD 心跳間隙"
 
 msgid "RRD step interval"
-msgstr ""
+msgstr "RRD 區間間隙"
 
 msgid "RRDTool"
-msgstr ""
+msgstr "RRDTool"
 
 msgid "RRDTool Plugin Configuration"
-msgstr ""
+msgstr "RRDTool 外掛配置"
 
 msgid "Rows per RRA"
-msgstr ""
+msgstr "行/RRA"
 
 msgid "Script"
-msgstr ""
+msgstr "指令碼"
 
 msgid "Seconds"
-msgstr ""
+msgstr ""
 
 msgid "Sensor list"
-msgstr ""
+msgstr "感測器列表"
 
 msgid "Sensors"
-msgstr ""
+msgstr "感測器"
 
 msgid "Sensors Plugin Configuration"
-msgstr ""
+msgstr "Sensors 外掛配置"
 
 msgid "Server host"
-msgstr ""
+msgstr "伺服器主機"
 
 msgid "Server port"
-msgstr ""
+msgstr "伺服器埠"
 
 msgid "Setup"
-msgstr ""
+msgstr "設定"
 
 msgid "Shaping class monitoring"
-msgstr ""
+msgstr "整形類監控"
 
 msgid "Show max values instead of averages"
-msgstr ""
+msgstr "顯示最大值而不是平均值"
 
 msgid "Socket file"
-msgstr ""
+msgstr "套接字檔案"
 
 msgid "Socket group"
-msgstr ""
+msgstr "套接字組"
 
 msgid "Socket permissions"
-msgstr ""
+msgstr "套接字許可權"
 
 msgid "Source ip range"
-msgstr ""
+msgstr "源 IP 區間"
 
 msgid "Specifies what information to collect about links."
-msgstr ""
+msgstr "收集指定連結相關資訊。"
 
 msgid "Specifies what information to collect about routes."
-msgstr ""
+msgstr "收集指定路由相關資訊。"
 
 msgid "Specifies what information to collect about the global topology."
-msgstr ""
+msgstr "收集指定拓撲相關資訊。"
 
 msgid "Splash Leases"
-msgstr ""
+msgstr "Splash Leases"
 
 msgid "Splash Leases Plugin Configuration"
-msgstr ""
+msgstr "Splash Leases 外掛配置"
 
 msgid "Statistics"
-msgstr ""
+msgstr "統計"
 
 msgid "Storage directory"
-msgstr ""
+msgstr "儲存目錄"
 
 msgid "Storage directory for the csv files"
-msgstr ""
+msgstr "csv 儲存目錄"
 
 msgid "Store data values as rates instead of absolute values"
-msgstr ""
+msgstr "儲存資料值變化量而不是絕對值"
 
 msgid "Stored timespans"
-msgstr ""
+msgstr "儲存時間跨度"
 
 msgid "System Load"
-msgstr ""
+msgstr "系統載入"
 
 msgid "TCP Connections"
-msgstr ""
+msgstr "TCP 連線數"
 
 msgid "TCPConns Plugin Configuration"
-msgstr ""
+msgstr "TCPConns 外掛配置"
 
 msgid "TTL for network packets"
-msgstr ""
+msgstr "網路包 TTL"
 
 msgid "TTL for ping packets"
-msgstr ""
+msgstr "ping 包 TTL"
 
 msgid "Table"
-msgstr ""
+msgstr "表"
+
+msgid "The APCUPS plugin collects statistics about the APC UPS."
+msgstr "APCUPS 外掛收集 APC UPS 的統計資訊。"
 
 msgid "The NUT plugin reads information about Uninterruptible Power Supplies."
-msgstr ""
+msgstr "NUT 外掛讀取 UPS 資訊。"
 
 msgid ""
 "The OLSRd plugin reads information about meshed networks from the txtinfo "
 "plugin of OLSRd."
-msgstr ""
+msgstr "OLSRd 外掛通過 txtinfo 獲取 meshed 網路資訊。"
 
 msgid ""
 "The OpenVPN plugin gathers information about the current vpn connection "
 "status."
-msgstr ""
+msgstr "OpenVPN 外掛可以獲取 VPN 連線當前狀態"
 
 msgid ""
 "The conntrack plugin collects statistics about the number of tracked "
 "connections."
-msgstr ""
+msgstr "conntrack 外掛獲取連線數資訊。"
 
 msgid "The cpu plugin collects basic statistics about the processor usage."
-msgstr ""
+msgstr "cpu 外掛獲取處理器相關資訊。"
 
 msgid ""
 "The csv plugin stores collected data in csv file format for further "
 "processing by external programs."
-msgstr ""
+msgstr "csv外掛用於儲存資料,以方便其他程式處理資料。"
 
 msgid ""
 "The df plugin collects statistics about the disk space usage on different "
 "devices, mount points or filesystem types."
-msgstr ""
+msgstr "df 外掛收集磁碟空間使用情況、掛載點及檔案系統相關資訊。"
 
 msgid ""
 "The disk plugin collects detailled usage statistics for selected partitions "
 "or whole disks."
-msgstr ""
+msgstr "disk 外掛收集磁碟分割槽使用情況及相關資訊。"
 
 msgid ""
 "The dns plugin collects detailled statistics about dns related traffic on "
 "selected interfaces."
-msgstr ""
+msgstr "dns 外掛收集 dns 資料流相關資訊。"
 
 msgid ""
 "The email plugin creates a unix socket which can be used to transmit email-"
@@ -527,44 +565,50 @@ msgid ""
 "to be used in conjunction with Mail::SpamAssasin::Plugin::Collectd but can "
 "be used in other ways as well."
 msgstr ""
+"郵件外掛建立一個 unix 套接字用於為 Collectd 守護程序傳送統計資訊到電子郵件系"
+"統。這個外掛主要目的是結合使用 Mail::SpamAssasin::Pulgin::Collectd,但可以用"
+"在其他方面。"
 
 msgid "The entropy plugin collects statistics about the available entropy."
-msgstr ""
+msgstr "entropy 外掛收集可用熵的統計資訊。"
 
 msgid ""
 "The exec plugin starts external commands to read values from or to notify "
 "external processes when certain threshold values have been reached."
 msgstr ""
+"exec 外掛用於當某些監控值已到達閾值時,啟動外部命令讀值或通知外部程式。"
 
 msgid ""
 "The interface plugin collects traffic statistics on selected interfaces."
-msgstr ""
+msgstr "Interface 外掛用於收集選定介面的資料包的統計資訊。"
 
 msgid ""
 "The iptables plugin will monitor selected firewall rules and collect "
 "informations about processed bytes and packets per rule."
-msgstr ""
+msgstr "iptables 外掛將監測選定防火牆規則和收集關於每個規則處理的資料包資訊。"
 
 msgid ""
 "The irq plugin will monitor the rate of issues per second for each selected "
 "interrupt. If no interrupt is selected then all interrupts are monitored."
 msgstr ""
+"irq 外掛用於監控選定中斷的每秒鐘產生的中斷數。如果沒有中斷被選中,則表示對所"
+"有中斷進行監測。"
 
 msgid ""
 "The iwinfo plugin collects statistics about wireless signal strength, noise "
 "and quality."
-msgstr ""
+msgstr "iwinfo 外掛收集無線訊號強度、噪聲和質量的統計資訊。"
 
 msgid "The load plugin collects statistics about the general system load."
-msgstr ""
+msgstr "load 外掛收集常規系統載入統計資訊。"
 
 msgid "The memory plugin collects statistics about the memory usage."
-msgstr ""
+msgstr "memory 外掛收集關於記憶體使用情況的統計資訊。"
 
 msgid ""
 "The netlink plugin collects extended informations like qdisc-, class- and "
 "filter-statistics for selected interfaces."
-msgstr ""
+msgstr "netlink 外掛收集為選定介面 qdisc-、class- 和 filter- 的擴充套件資料。"
 
 msgid ""
 "The network plugin provides network based communication between different "
@@ -572,16 +616,19 @@ msgid ""
 "client mode locally collected data is transferred to a collectd server "
 "instance, in server mode the local instance receives data from other hosts."
 msgstr ""
+"network 外掛提供了基於網路的不同 Collectd 例項。Collectd 可以工作在客戶端和服"
+"務器兩個模式。在客戶端模式下收集本地資訊,然後轉移到一個 Collectd 伺服器例項"
+"中,在伺服器模式將從其他主機收集資訊。"
 
 msgid ""
 "The ping plugin will send icmp echo replies to selected hosts and measure "
 "the roundtrip time for each host."
-msgstr ""
+msgstr "ping 外掛將傳送 icmp echo replies 到選定主機來測量每臺主機的響應時間。"
 
 msgid ""
 "The processes plugin collects informations like cpu time, page faults and "
 "memory usage of selected processes."
-msgstr ""
+msgstr "processes 外掛收集選定程序的 cpu 時間、頁面錯誤和記憶體使用資訊。"
 
 msgid ""
 "The rrdtool plugin stores the collected data in rrd database files, the "
@@ -589,123 +636,152 @@ msgid ""
 "values will result in a very high memory consumption in the temporary "
 "directory. This can render the device unusable!</strong>"
 msgstr ""
+"rrdtool 外掛將收集資料以圖表的形式儲存在 RRD 資料庫檔案中。<br /><br /"
+"><strong>警告:錯誤的引數設定,將導致非常高的臨時記憶體消耗。這可能會使裝置無法"
+"使用!</strong>"
 
 msgid ""
 "The sensors plugin uses the Linux Sensors framework to gather environmental "
 "statistics."
-msgstr ""
+msgstr "sensors 外掛使用 Linux Sensors 框架來收集環境統計資訊。"
 
 msgid ""
 "The splash leases plugin uses libuci to collect statistics about splash "
 "leases."
-msgstr ""
+msgstr "splash leases 外掛使用 libuci 來收集 splash leases 的統計資訊。"
 
 msgid ""
 "The statistics package uses <a href=\"https://collectd.org/\">Collectd</a> "
 "to gather data and <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> to "
 "render diagram images."
 msgstr ""
+"Statistics 軟體包使用 <a href=\"https://collectd.org/\">Collectd</a> 來收集數"
+"據,並用 <a href=\"http://oss.oetiker.ch/rrdtool/\">RRDtool</a> 生成統計圖"
+"表。"
 
 msgid ""
 "The tcpconns plugin collects informations about open tcp connections on "
 "selected ports."
-msgstr ""
+msgstr "tcpconns 外掛收集選定埠 TCP 連線資訊。"
 
 msgid ""
 "The thermal plugin will monitor temperature of the system. Data is typically "
 "read from /sys/class/thermal/*/temp ( '*' denotes the thermal device to be "
 "read, e.g. thermal_zone1 )"
 msgstr ""
+"thermal 外掛將會監控系統溫度。資料主要取自 /sys/class/thermal/*/temp ('*' 表"
+"示溫感裝置的名字,比如 thermal_zone1) 。"
 
 msgid ""
 "The unixsock plugin creates a unix socket which can be used to read "
 "collected data from a running collectd instance."
-msgstr ""
+msgstr "unixsock 外掛建立一個 unix 套接字可用於讀取 Collectd 例項的收集資訊。"
 
 msgid "The uptime plugin collects statistics about the uptime of the system."
-msgstr ""
+msgstr "uptime 外掛收集系統啟動時間的統計資訊。"
 
 msgid "Thermal"
-msgstr ""
+msgstr "溫感"
 
 msgid "Thermal Plugin Configuration"
-msgstr ""
+msgstr "溫感外掛配置"
+
+msgid "This plugin collects statistics about the processor context switches."
+msgstr "此外掛收集處理器上下文切換的統計資訊。"
 
 msgid "This plugin collects statistics about the processor frequency scaling."
-msgstr ""
+msgstr "此外掛收集處理器頻率調整的統計資訊。"
 
 msgid ""
 "This section defines on which interfaces collectd will wait for incoming "
 "connections."
-msgstr ""
+msgstr "定義 Collectd 將監聽哪個介面來傳入連線收集資料。"
 
 msgid ""
 "This section defines to which servers the locally collected data is sent to."
-msgstr ""
+msgstr "定義本地收集資料被髮送到哪臺 Collected 伺服器。"
 
 msgid "Try to lookup fully qualified hostname"
-msgstr ""
+msgstr "嘗試解析主機全域名"
 
 msgid "UPS"
-msgstr ""
+msgstr "UPS"
 
 msgid "UPS Plugin Configuration"
-msgstr ""
+msgstr "UPS 外掛配置"
 
 msgid "UPS name in NUT ups@host format"
-msgstr ""
+msgstr "UPS 名使用 NUT(Network UPS Tools)格式:ups@host"
 
 msgid "UnixSock"
-msgstr ""
+msgstr "UnixSock"
 
 msgid "Unixsock Plugin Configuration"
-msgstr ""
+msgstr "Unixsock 外掛配置"
 
 msgid "Uptime"
-msgstr ""
+msgstr "執行時間"
 
 msgid "Uptime Plugin Configuration"
-msgstr ""
+msgstr "執行時間外掛配置"
 
 msgid "Use improved naming schema"
-msgstr ""
+msgstr "使用更高階的命名規則"
 
 msgid "Used PID file"
-msgstr ""
+msgstr "正在使用的 PID 檔案"
 
 msgid "User"
-msgstr ""
+msgstr "使用者"
 
 msgid "Verbose monitoring"
-msgstr ""
+msgstr "詳細監測"
 
 msgid "Wireless"
-msgstr ""
+msgstr "無線"
 
 msgid "Wireless iwinfo Plugin Configuration"
-msgstr ""
+msgstr "無線 iwinfo 外掛配置"
 
 msgid ""
 "You can install additional collectd-mod-* plugins to enable more statistics."
-msgstr ""
+msgstr "您可以安裝更多的 collectd-mod-* 外掛以獲得更多的統計資料。"
 
 msgid "e.g. br-ff"
-msgstr ""
+msgstr "例如:br-ff"
 
 msgid "e.g. br-lan"
-msgstr ""
+msgstr "例如:br-lan"
 
 msgid "e.g. reject-with tcp-reset"
-msgstr ""
+msgstr "例如:eject-with tcp-reset"
 
 msgid "max. 16 chars"
-msgstr ""
+msgstr "最長 16 個字元"
 
 msgid "reduces rrd size"
-msgstr ""
+msgstr "減少 rrd 大小"
 
 msgid "seconds; multiple separated by space"
-msgstr ""
+msgstr "秒數;多個使用空格分隔"
 
 msgid "server interfaces"
-msgstr ""
+msgstr "伺服器介面"
+
+#~ msgid "Collectd"
+#~ msgstr "Collectd"
+
+#~ msgid "System plugins"
+#~ msgstr "系統外掛"
+
+#~ msgid ""
+#~ "The statistics package is based on <a href=\"http://collectd.org/index."
+#~ "shtml\">Collectd</a> and uses <a href=\"http://oss.oetiker.ch/rrdtool/"
+#~ "\">RRD Tool</a> to render diagram images from collected data."
+#~ msgstr ""
+#~ "統計軟體包是基於<a href=\"http://collectd.org/index.shtml\">Collectd</a>,"
+#~ "並使用<a href=\"http://oss.oetiker.ch/rrdtool/\">RRD工具</a>來渲染圖表,用"
+#~ "於收集資料。"
+
+#~ msgid "group name"
+#~ msgstr "群名稱"
index 774a838..8cc918e 100644 (file)
@@ -49,9 +49,17 @@ 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'
 
+config statistics 'collectd_contextswitch'
+       option enable '0'
+
 config statistics 'collectd_cpu'
        option enable '1'
 
index df9af15..2bf63c1 100755 (executable)
@@ -255,6 +255,12 @@ end
 
 
 plugins = {
+       apcups = {
+               { "Host", "Port" },
+               { },
+               { }
+       },
+
        collectd = {
                { "BaseDir", "Include", "PIDFile", "PluginDir", "TypesDB", "Interval", "ReadThreads", "Hostname" },
                { },
@@ -279,6 +285,12 @@ plugins = {
                { }
        },
 
+        contextswitch = {
+                { },
+                { },
+                { }
+        },
+
        csv     = {
                { "DataDir" },
                { "StoreRates" },
@@ -349,12 +361,6 @@ plugins = {
                { }
        },
 
-       madwifi = {
-               { "WatchSet" },
-               { },
-               { "Interfaces", "WatchAdds" }
-       },
-
        memory = { 
                { },
                { },
@@ -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 9dd3491..f4dba62 100644 (file)
@@ -1,23 +1,26 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2013-10-08 14:06+0200\n"
-"PO-Revision-Date: 2014-06-15 04:57+0200\n"
-"Last-Translator: phantasm131 <phantasm131@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-10-29 15:56+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Alternative download speed"
 msgstr "临时下载限速"
 
 msgid "Alternative speed enabled"
-msgstr "启用临时限速"
+msgstr "临时限速已启用"
 
 msgid "Alternative speed time begin"
 msgstr "计划限速始于"
@@ -29,7 +32,7 @@ msgid "Alternative speed time end"
 msgstr "计划限速止于"
 
 msgid "Alternative speed timing enabled"
-msgstr "启用计划限速"
+msgstr "计划限速已启用"
 
 msgid "Alternative upload speed"
 msgstr "临时上传速度"
@@ -41,13 +44,13 @@ msgid "Bandwidth settings"
 msgstr "带宽配置"
 
 msgid "Binding address IPv4"
-msgstr "绑定IPv4地址"
+msgstr "绑定 IPv4 地址"
 
 msgid "Binding address IPv6"
-msgstr "绑定IPv6地址"
+msgstr "绑定 IPv6 地址"
 
 msgid "Block list enabled"
-msgstr "å\90¯ç\94¨é\98»æ­¢å\88\97表"
+msgstr "é\98»æ­¢å\88\97表已å\90¯ç\94¨"
 
 msgid "Blocklist URL"
 msgstr "URL阻止清单"
@@ -62,7 +65,7 @@ msgid "Config file directory"
 msgstr "配置文件的目录"
 
 msgid "DHT enabled"
-msgstr "启用DHT"
+msgstr "启用 DHT"
 
 msgid "Debug"
 msgstr "调试"
@@ -71,7 +74,7 @@ msgid "Download directory"
 msgstr "下载目录"
 
 msgid "Download queue enabled"
-msgstr "启用下载队列"
+msgstr "下载队列已启用"
 
 msgid "Download queue size"
 msgstr "下载队列大小"
@@ -80,7 +83,7 @@ msgid "Enable watch directory"
 msgstr "启用种子轮询目录"
 
 msgid "Enabled"
-msgstr "启用"
+msgstr "å·²å\90¯ç\94¨"
 
 msgid "Encryption"
 msgstr "加密"
@@ -101,7 +104,7 @@ msgid "Full"
 msgstr "全分配"
 
 msgid "Global peer limit"
-msgstr "全局Peer限制"
+msgstr "全局 Peer 限制"
 
 msgid "Global settings"
 msgstr "全局设置"
@@ -110,22 +113,22 @@ msgid "Idle seeding limit"
 msgstr "空闲做种限时"
 
 msgid "Idle seeding limit enabled"
-msgstr "启用空闲做种时间"
+msgstr "空闲做种时间已启用"
 
 msgid "Incomplete directory"
 msgstr "未完成目录"
 
 msgid "Incomplete directory enabled"
-msgstr "启用未完成目录"
+msgstr "未完成目录已启用"
 
 msgid "Info"
 msgstr "信息"
 
 msgid "LPD enabled"
-msgstr "启用LPD"
+msgstr "LPD 已启用"
 
 msgid "Lazy bitfield enabled"
-msgstr "启用位段延迟"
+msgstr "位段延迟已启用"
 
 msgid "Message level"
 msgstr "消息级别"
@@ -140,55 +143,57 @@ msgid ""
 "Number/bitfield. Start with 0, then for each day you want the scheduler "
 "enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - "
 "8, Thursday - 16, Friday - 32, Saturday - 64"
-msgstr "生效日期是对应日期的算术加和值。对应关系:周日-1、周一-2、周二-4、周三-8、周四-16、周五-32、周六-64。"
+msgstr ""
+"生效日期是对应日期的算术加和值。对应关系:周日-1、周一-2、周二-4、周三-8、周"
+"四-16、周五-32、周六-64。"
 
 msgid "Off"
 msgstr "关闭"
 
 msgid "Open Web Interface"
-msgstr "Web管理界面"
+msgstr "打开 Web 管理界面"
 
 msgid "PEX enabled"
-msgstr "启用PEX"
+msgstr "PEX 已启用"
 
 msgid "Peer Port settings"
-msgstr "Peer端口设置"
+msgstr "Peer 端口设置"
 
 msgid "Peer congestion algorithm"
-msgstr "Peer拥塞算法"
+msgstr "Peer 拥塞算法"
 
 msgid "Peer limit per torrent"
-msgstr "每个种子Peer限制数"
+msgstr "每个种子 Peer 限制数"
 
 msgid "Peer port"
-msgstr "Peer端口"
+msgstr "Peer 端口"
 
 msgid "Peer port random high"
-msgstr "Peer随机端口最大值"
+msgstr "Peer 随机端口最大值"
 
 msgid "Peer port random low"
-msgstr "Peer随机端口最小值"
+msgstr "Peer 随机端口最小值"
 
 msgid "Peer port random on start"
-msgstr "Peer端口随机"
+msgstr "Peer 端口随机"
 
 msgid "Peer settings"
-msgstr "Peer设置"
+msgstr "Peer 设置"
 
 msgid "Peer socket tos"
-msgstr "Peer套接字tos值"
+msgstr "Peer 套接字 tos 值"
 
 msgid "Port forwarding enabled"
-msgstr "启用端口转发"
+msgstr "端口转发已启用"
 
 msgid "Preferred"
 msgstr "优先"
 
 msgid "Prefetch enabled"
-msgstr "启用预取缓存"
+msgstr "预取缓存已启用"
 
 msgid "Queue stalled enabled"
-msgstr "启用队列暂停"
+msgstr "队列暂停已启用"
 
 msgid "Queue stalled minutes"
 msgstr "队列暂停分钟"
@@ -200,37 +205,37 @@ msgid "RPC URL"
 msgstr "RPC URL"
 
 msgid "RPC authentication required"
-msgstr "PRC授权验证"
+msgstr "RPC 授权验证"
 
 msgid "RPC bind address"
-msgstr "RPC绑定地址"
+msgstr "RPC 绑定地址"
 
 msgid "RPC enabled"
-msgstr "启用PRC"
+msgstr "RPC 已启用"
 
 msgid "RPC password"
-msgstr "RPC密码"
+msgstr "RPC 密码"
 
 msgid "RPC port"
-msgstr "RPC端口"
+msgstr "RPC 端口"
 
 msgid "RPC settings"
-msgstr "RPC配置"
+msgstr "RPC 配置"
 
 msgid "RPC username"
-msgstr "RPC用户名"
+msgstr "RPC 用户名"
 
 msgid "RPC whitelist"
-msgstr "RPC白名单"
+msgstr "RPC 白名单"
 
 msgid "RPC whitelist enabled"
-msgstr "启用RPC白名单"
+msgstr "RPC 白名单已启用"
 
 msgid "Ratio limit"
 msgstr "分享率限值"
 
 msgid "Ratio limit enabled"
-msgstr "å\90¯ç\94¨å\88\86享ç\8e\87é\99\90å\88"
+msgstr "å\88\86享ç\8e\87é\99\90å\88¶å·²å\90¯ç\94¨"
 
 msgid "Rename partial files"
 msgstr "重命名未完成文件"
@@ -242,16 +247,16 @@ msgid "Scheduling"
 msgstr "计划任务"
 
 msgid "Scrape paused torrents enabled"
-msgstr "忽ç\95¥æ\9a\82å\81\9cç\9a\84ç§\8då­\90"
+msgstr "忽ç\95¥æ\9a\82å\81\9cç§\8då­\90å·²å\90¯ç\94¨"
 
 msgid "Script torrent done enabled"
-msgstr "种子完成时运行脚本"
+msgstr "种子完成时运行脚本已启用"
 
 msgid "Script torrent done filename"
 msgstr "脚本文件名"
 
 msgid "Seed queue enabled"
-msgstr "å\90¯ç\94¨å\81\9aç§\8dé\98\9få\88\97"
+msgstr "å\81\9aç§\8dé\98\9få\88\97å·²å\90¯ç\94¨"
 
 msgid "Seed queue size"
 msgstr "做种队列大小"
@@ -260,13 +265,13 @@ msgid "Speed limit down"
 msgstr "下载限速"
 
 msgid "Speed limit down enabled"
-msgstr "启用下载限速"
+msgstr "下载限速已启用"
 
 msgid "Speed limit up"
 msgstr "上传限速"
 
 msgid "Speed limit up enabled"
-msgstr "启用上传限速"
+msgstr "上传限速已启用"
 
 msgid "Transmission"
 msgstr "Transmission"
@@ -274,7 +279,7 @@ msgstr "Transmission"
 msgid ""
 "Transmission daemon is a simple bittorrent client, here you can configure "
 "the settings."
-msgstr "Transmission是个简单易用的BT/PT客户端。"
+msgstr "Transmission 是一个简单的 bittorrent 客户端,在这里您可以配置其设置。"
 
 msgid "Trash original torrent files"
 msgstr "删除种子源文件"
@@ -286,10 +291,10 @@ msgid "Watch directory"
 msgstr "轮询种子目录"
 
 msgid "in minutes from midnight"
-msgstr "从晚上00:00起的分钟数,限速到临时速度"
+msgstr "从晚上 00:00 起的分钟数,限速到临时速度"
 
 msgid "preallocation"
 msgstr "磁盘预分配策略"
 
 msgid "uTP enabled"
-msgstr "启用uTP"
+msgstr "uTP 已启用"
index 78da18d..304bfda 100644 (file)
@@ -1,84 +1,89 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-16 23:11+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2013-10-08 14:06+0200\n"
+"PO-Revision-Date: 2017-10-29 15:56+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Alternative download speed"
-msgstr "P2P代抓下載速度"
+msgstr "臨時下載限速"
 
 msgid "Alternative speed enabled"
-msgstr "P2P代抓速度啟用"
+msgstr "臨時限速已啟用"
 
 msgid "Alternative speed time begin"
-msgstr "P2P代抓起始時間"
+msgstr "計劃限速始於"
 
 msgid "Alternative speed time day"
-msgstr "P2P代抓起每日時間"
+msgstr "計劃限速日期"
 
 msgid "Alternative speed time end"
-msgstr "P2P代抓結束時間"
+msgstr "計劃限速止於"
 
 msgid "Alternative speed timing enabled"
-msgstr "P2P代抓週期機制啟用"
+msgstr "計劃限速已啟用"
 
 msgid "Alternative upload speed"
-msgstr "P2P代抓上傳速度"
+msgstr "臨時上傳速度"
 
 msgid "Automatically start added torrents"
-msgstr "ç\95¶å¢\9eå\8a ç¨®å­\90å¾\8cè\87ªå\8b\95é\96\8bå§\8b下載"
+msgstr "種å­\90è\87ªå\8b\95下載"
 
 msgid "Bandwidth settings"
-msgstr "流量設定"
+msgstr "頻寬配置"
 
 msgid "Binding address IPv4"
-msgstr "ç\81å®\9aç\9a\84IPv4ä½\8dç½®"
+msgstr "繫çµ\90 IPv4 ä½\8då\9d\80"
 
 msgid "Binding address IPv6"
-msgstr "ç\81å®\9aç\9a\84IPv6ä½\8dç½®"
+msgstr "繫çµ\90 IPv6 ä½\8då\9d\80"
 
 msgid "Block list enabled"
-msgstr "å\95\9fç\94¨å°\81é\8e\96å\88\97表"
+msgstr "é\98»æ­¢å\88\97表已å\95\9fç\94¨"
 
 msgid "Blocklist URL"
-msgstr "封鎖URL"
+msgstr "URL阻止清單"
 
 msgid "Blocklists"
-msgstr "封鎖列表"
+msgstr "阻止清單"
 
 msgid "Cache size in MB"
-msgstr "快取大小(MB)"
+msgstr "快取大小(MB)"
 
 msgid "Config file directory"
-msgstr "設定檔目錄"
+msgstr "配置檔案的目錄"
 
 msgid "DHT enabled"
-msgstr "DHT啟用"
+msgstr "啟用 DHT"
 
 msgid "Debug"
-msgstr "錯"
+msgstr "錯"
 
 msgid "Download directory"
 msgstr "下載目錄"
 
 msgid "Download queue enabled"
-msgstr "啟用下載隊列"
+msgstr "下載佇列已啟用"
 
 msgid "Download queue size"
-msgstr "下載列大小"
+msgstr "下載列大小"
 
 msgid "Enable watch directory"
-msgstr "啟用觀看目錄"
+msgstr "啟用種子輪詢目錄"
 
 msgid "Enabled"
-msgstr "啟用"
+msgstr "å·²å\95\9fç\94¨"
 
 msgid "Encryption"
 msgstr "加密"
@@ -96,200 +101,200 @@ msgid "Forced"
 msgstr "強制"
 
 msgid "Full"
-msgstr "全"
+msgstr "全分配"
 
 msgid "Global peer limit"
-msgstr "一般連接限制"
+msgstr "全域性 Peer 限制"
 
 msgid "Global settings"
-msgstr "一般設定"
+msgstr "全域性設定"
 
 msgid "Idle seeding limit"
-msgstr "閒置作種限制"
+msgstr "空閒做種限時"
 
 msgid "Idle seeding limit enabled"
-msgstr "閒置作種限制機制啟用"
+msgstr "空閒做種時間已啟用"
 
 msgid "Incomplete directory"
-msgstr "不完整的目錄路徑"
+msgstr "未完成目錄"
 
 msgid "Incomplete directory enabled"
-msgstr "不完整的目錄置放區機制啟用"
+msgstr "未完成目錄已啟用"
 
 msgid "Info"
 msgstr "資訊"
 
 msgid "LPD enabled"
-msgstr "LPD啟用"
+msgstr "LPD 已啟用"
 
 msgid "Lazy bitfield enabled"
-msgstr "防ISP懶散悠閒抓法啟用"
+msgstr "位段延遲已啟用"
 
 msgid "Message level"
-msgstr "è¨\8aæ\81¯ç­\89ç´\9a"
+msgstr "è¨\8aæ\81¯ç´\9aå\88¥"
 
 msgid "Miscellaneous"
-msgstr "雜項"
+msgstr "其他引數"
 
 msgid "None"
-msgstr "None"
+msgstr ""
 
 msgid ""
 "Number/bitfield. Start with 0, then for each day you want the scheduler "
 "enabled, add a value. For Sunday - 1, Monday - 2, Tuesday - 4, Wednesday - "
 "8, Thursday - 16, Friday - 32, Saturday - 64"
 msgstr ""
-"數字/欄位. 由0開始,每日你若要啟用排程,就加上新數值. 星期日 -1, 星期一 -2, 星期二 -4, 星期三 -8, 星期四-16, "
-"星期五-32星期六 -64"
+"生效日期是對應日期的算術加和值。對應關係:週日-1、週一-2、週二-4、週三-8、周"
+"四-16、週五-32、週六-64。"
 
 msgid "Off"
 msgstr "關閉"
 
 msgid "Open Web Interface"
-msgstr "開啟Web介面"
+msgstr "開啟 Web 管理介面"
 
 msgid "PEX enabled"
-msgstr "啟用PEX"
+msgstr "PEX 已啟用"
 
 msgid "Peer Port settings"
-msgstr "P2P節點埠號設定"
+msgstr "Peer 埠設定"
 
 msgid "Peer congestion algorithm"
-msgstr "P2P節點堵塞演算法"
+msgstr "Peer 擁塞演算法"
 
 msgid "Peer limit per torrent"
-msgstr "P2P節點每個種子的限制"
+msgstr "每個種子 Peer 限制數"
 
 msgid "Peer port"
-msgstr "P2P節點埠號"
+msgstr "Peer 埠"
 
 msgid "Peer port random high"
-msgstr "P2P節點較高隨機埠號"
+msgstr "Peer 隨機埠最大值"
 
 msgid "Peer port random low"
-msgstr "P2P節點較低隨機埠號"
+msgstr "Peer 隨機埠最小值"
 
 msgid "Peer port random on start"
-msgstr "一開始就啟用P2P節點隨機埠"
+msgstr "Peer 埠隨機"
 
 msgid "Peer settings"
-msgstr "埠號設定"
+msgstr "Peer 設定"
 
 msgid "Peer socket tos"
-msgstr "P2P節點優先IP插槽"
+msgstr "Peer 套接字 tos 值"
 
 msgid "Port forwarding enabled"
-msgstr "埠轉發啟用"
+msgstr "å\9f è½\89ç\99¼å·²å\95\9fç\94¨"
 
 msgid "Preferred"
-msgstr "首選"
+msgstr "優先"
 
 msgid "Prefetch enabled"
-msgstr "預啟用"
+msgstr "預取快取已啟用"
 
 msgid "Queue stalled enabled"
-msgstr "隊列停滯啟用"
+msgstr "佇列暫停已啟用"
 
 msgid "Queue stalled minutes"
-msgstr "隊列停滯分鐘"
+msgstr "佇列暫停分鐘"
 
 msgid "Queueing"
-msgstr "排隊中"
+msgstr "佇列"
 
 msgid "RPC URL"
-msgstr "遠端調用網址"
+msgstr "RPC URL"
 
 msgid "RPC authentication required"
-msgstr "遠端調用需要驗證"
+msgstr "RPC 授權驗證"
 
 msgid "RPC bind address"
-msgstr "遠端調用綁定位址"
+msgstr "RPC 繫結位址"
 
 msgid "RPC enabled"
-msgstr "遠端調用功能啟用"
+msgstr "RPC 已啟用"
 
 msgid "RPC password"
-msgstr "遠端調用密碼"
+msgstr "RPC 密碼"
 
 msgid "RPC port"
-msgstr "遠端調用埠號"
+msgstr "RPC 埠"
 
 msgid "RPC settings"
-msgstr "遠端調用設定"
+msgstr "RPC 配置"
 
 msgid "RPC username"
-msgstr "遠端調用用戶名稱"
+msgstr "RPC 使用者名稱"
 
 msgid "RPC whitelist"
-msgstr "遠端調用白名單"
+msgstr "RPC 白名單"
 
 msgid "RPC whitelist enabled"
-msgstr "啟用遠端調用白名單"
+msgstr "RPC 白名單已啟用"
 
 msgid "Ratio limit"
-msgstr "比率限制"
+msgstr "分享率限值"
 
 msgid "Ratio limit enabled"
-msgstr "å\95\9fç\94¨æ¯\94ç\8e\87é\99\90å\88"
+msgstr "å\88\86享ç\8e\87é\99\90å\88¶å·²å\95\9fç\94¨"
 
 msgid "Rename partial files"
-msgstr "不完整檔案更名"
+msgstr "重新命名未完成檔案"
 
 msgid "Run daemon as user"
-msgstr "像用戶使用一樣常駐"
+msgstr "使用者組"
 
 msgid "Scheduling"
-msgstr "排程"
+msgstr "計劃任務"
 
 msgid "Scrape paused torrents enabled"
-msgstr "下載暫停開始做種"
+msgstr "忽略暫停種子已啟用"
 
 msgid "Script torrent done enabled"
-msgstr "作種腳本啟用"
+msgstr "種子完成時執行指令碼已啟用"
 
 msgid "Script torrent done filename"
-msgstr "作種腳本檔名"
+msgstr "指令碼檔名"
 
 msgid "Seed queue enabled"
-msgstr "å\95\9fç\94¨ä½\9c種é\9a\8aå\88\97"
+msgstr "å\81\9a種ä½\87å\88\97å·²å\95\9fç\94¨"
 
 msgid "Seed queue size"
-msgstr "作種隊列大小"
+msgstr "做種佇列大小"
 
 msgid "Speed limit down"
-msgstr "ä¸\8bè¼\89é\80\9f度é\99\90å\88"
+msgstr "ä¸\8bè¼\89é\99\90é\80\9f"
 
 msgid "Speed limit down enabled"
-msgstr "啟用下載速度限制"
+msgstr "下載限速已啟用"
 
 msgid "Speed limit up"
-msgstr "ä¸\8aå\82³é\80\9f度é\99\90å\88"
+msgstr "ä¸\8aå\82³é\99\90é\80\9f"
 
 msgid "Speed limit up enabled"
-msgstr "啟用上傳速度限制"
+msgstr "上傳限速已啟用"
 
 msgid "Transmission"
-msgstr "傳輸任務"
+msgstr "Transmission"
 
 msgid ""
 "Transmission daemon is a simple bittorrent client, here you can configure "
 "the settings."
-msgstr "傳輸任務常駐是一個簡單的bittorrent用戶端程式, 這裡你可以配置設定"
+msgstr "Transmission 是一個簡單的 bittorrent 客戶端,在這裡您可以配置其設定。"
 
 msgid "Trash original torrent files"
-msgstr "丟棄來源種子檔"
+msgstr "刪除種子原始檔"
 
 msgid "Upload slots per torrent"
-msgstr "每個種子的上傳插槽數"
+msgstr "每個種子上傳連線數"
 
 msgid "Watch directory"
-msgstr "監看目錄"
+msgstr "輪詢種子目錄"
 
 msgid "in minutes from midnight"
-msgstr "從午夜算起用分表示"
+msgstr "從晚上 00:00 起的分鐘數,限速到臨時速度"
 
 msgid "preallocation"
-msgstr "預先分配"
+msgstr "磁碟預分配策略"
 
 msgid "uTP enabled"
-msgstr "啟用uTP"
+msgstr "uTP 已啟用"
index f4b1b0a..6170f9d 100644 (file)
@@ -1,11 +1,11 @@
-#
-# This is free software, licensed under the Apache License, Version 2.0 .
+# Copyright 2017 Dirk Brenken (dev@brenken.org)
+# This is free software, licensed under the Apache License, Version 2.0
 #
 
 include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=LuCI support for Travelmate
-LUCI_DEPENDS:=+travelmate
+LUCI_DEPENDS:=+travelmate +luci-lib-jsonc
 LUCI_PKGARCH:=all
 
 include ../../luci.mk
index 27c19c4..a418a8e 100644 (file)
@@ -1,11 +1,35 @@
--- Licensed to the public under the Apache License 2.0.
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
 
 module("luci.controller.travelmate", package.seeall)
 
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local i18n = require("luci.i18n")
+local templ = require("luci.template")
+
 function index()
        if not nixio.fs.access("/etc/config/travelmate") then
                return
        end
+       entry({"admin", "services", "travelmate"}, firstchild(), _("Travelmate"), 40).dependent = false
+       entry({"admin", "services", "travelmate", "tab_from_cbi"}, cbi("travelmate/overview_tab", {hideresetbtn=true, hidesavebtn=true}), _("Overview"), 10).leaf = true
+       entry({"admin", "services", "travelmate", "stations"}, template("travelmate/stations"), _("Wireless Stations"), 20).leaf = true
+       entry({"admin", "services", "travelmate", "logfile"}, call("logread"), _("View Logfile"), 30).leaf = true
+       entry({"admin", "services", "travelmate", "advanced"}, firstchild(), _("Advanced"), 100)
+       entry({"admin", "services", "travelmate", "advanced", "configuration"}, cbi("travelmate/configuration_tab"), _("Edit Travelmate Configuration"), 110).leaf = true
+       entry({"admin", "services", "travelmate", "advanced", "cfg_wireless"}, cbi("travelmate/cfg_wireless_tab"), _("Edit Wireless Configuration"), 120).leaf = true
+       entry({"admin", "services", "travelmate", "advanced", "cfg_network"}, cbi("travelmate/cfg_network_tab"), _("Edit Network Configuration"), 130).leaf = true
+       entry({"admin", "services", "travelmate", "advanced", "cfg_firewall"}, cbi("travelmate/cfg_firewall_tab"), _("Edit Firewall Configuration"), 140).leaf = true
+
+       entry({"admin", "services", "travelmate", "wifiscan"}, template("travelmate/wifi_scan")).leaf = true
+       entry({"admin", "services", "travelmate", "wifiadd"}, cbi("travelmate/wifi_add", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+       entry({"admin", "services", "travelmate", "wifiedit"}, cbi("travelmate/wifi_edit", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+       entry({"admin", "services", "travelmate", "wifidelete"}, cbi("travelmate/wifi_delete", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+       entry({"admin", "services", "travelmate", "wifiorder"}, cbi("travelmate/wifi_order", {hideresetbtn=true, hidesavebtn=true})).leaf = true
+end
 
-       entry({"admin", "services", "travelmate"}, cbi("travelmate"), _("Travelmate"), 60)
+function logread()
+       local logfile = util.trim(util.exec("logread -e 'travelmate'"))
+       templ.render("travelmate/logread", {title = i18n.translate("Travelmate Logfile"), content = logfile})
 end
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua
deleted file mode 100644 (file)
index fa44d4b..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
--- Licensed to the public under the Apache License 2.0.
-
-m = Map("travelmate", translate("Travelmate"),
-       translate("Configuration of the Travelmate package to enable travel router functionality. ") .. [[</p>]] ..
-       translate("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. ") ..
-       [[<a href="https://github.com/openwrt/packages/tree/master/net/travelmate/files/README.md" target="_blank">]] 
-       .. translate("Link to detailed advice")
-       .. [[</a>]] )
-
--- General options
-
-s = m:section(NamedSection, "global", "travelmate", translate("Global options"))
-
-o = s:option(Flag, "trm_enabled", translate("Enable Travelmate"))
-o.rmempty = false
-o.default = 0
-
-o = s:option(Value, "trm_maxwait", translate("Max. timeout in seconds for wlan interface reload"),
-       translate("Default 20, range 10-60"))
-o.rmempty = false
-o.default = 20
-o.datatype = "range(10,60)"
-
-o = s:option(Value, "trm_maxretry", translate("Max. number of connection retries to an uplink"),
-       translate("Default 3, range 1-10"))
-o.rmempty = false
-o.default = 3
-o.datatype = "range(1,10)"
-
--- Extra options
-
-e = m:section(NamedSection, "global", "travelmate", translate("Extra options"))
-
-a = e:option(Flag, "trm_debug", translate("Debug logging"))
-a.rmempty = true
-a.default = a.disabled
-
-a = e:option(Value, "trm_iface", translate("Restrict reload trigger to certain interface(s)"),
-       translate("Space separated list of wwan interfaces that trigger reload action. To disable reload trigger set it to 'false'. Default: empty"))
-a.rmempty = true
-a.default = ""
-a.datatype = "uciname"
-
-a = e:option(Flag, "trm_iw", translate("Use iw for scanning"),
-       translate("Disable this if you want to use iwinfo instead of iw"))
-a.rmempty = true
-a.default = a.enabled
-
-return m
-
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
new file mode 100644 (file)
index 0000000..e5a048f
--- /dev/null
@@ -0,0 +1,37 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local trminput = "/etc/config/firewall"
+
+if not nixio.fs.access(trminput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main firewall configuration file (/etc/config/firewall)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(trminput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
new file mode 100644 (file)
index 0000000..0096d6a
--- /dev/null
@@ -0,0 +1,37 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local trminput = "/etc/config/network"
+
+if not nixio.fs.access(trminput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main network configuration file (/etc/config/network)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(trminput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
new file mode 100644 (file)
index 0000000..7ef9920
--- /dev/null
@@ -0,0 +1,37 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local trminput = "/etc/config/wireless"
+
+if not nixio.fs.access(trminput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main wireless configuration file (/etc/config/wireless)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(trminput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
new file mode 100644 (file)
index 0000000..8a20ab9
--- /dev/null
@@ -0,0 +1,39 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local util = require("luci.util")
+local trminput = "/etc/config/travelmate"
+
+if not nixio.fs.access(trminput) then
+       m = SimpleForm("error", nil, translate("Input file not found, please check your configuration."))
+       m.reset = false
+       m.submit = false
+       return m
+end
+
+m = SimpleForm("input", nil)
+m:append(Template("travelmate/config_css"))
+m.submit = translate("Save")
+m.reset = false
+
+s = m:section(SimpleSection, nil,
+       translate("This form allows you to modify the content of the main travelmate configuration file (/etc/config/travelmate)."))
+
+f = s:option(TextValue, "data")
+f.rows = 20
+f.rmempty = true
+
+function f.cfgvalue()
+       return nixio.fs.readfile(trminput) or ""
+end
+
+function f.write(self, section, data)
+       return nixio.fs.writefile(trminput, "\n" .. util.trim(data:gsub("\r\n", "\n")) .. "\n")
+end
+
+function s.handle(self, state, data)
+       return true
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
new file mode 100644 (file)
index 0000000..27971df
--- /dev/null
@@ -0,0 +1,189 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local json = require("luci.jsonc")
+local nw = require("luci.model.network").init()
+local fw = require("luci.model.firewall").init()
+local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
+local trminput = uci.get("travelmate", "global", "trm_rtfile") or "/tmp/trm_runtime.json"
+local uplink = uci.get("network", trmiface) or ""
+local parse = json.parse(fs.readfile(trminput) or "")
+
+m = Map("travelmate", translate("Travelmate"),
+       translate("Configuration of the travelmate package to to enable travel router functionality. ")
+       .. translatef("For further information "
+       .. "<a href=\"%s\" target=\"_blank\">"
+       .. "see online documentation</a>", "https://github.com/openwrt/packages/blob/master/net/travelmate/files/README.md"))
+
+function m.on_after_commit(self)
+       luci.sys.call("env -i /etc/init.d/travelmate restart >/dev/null 2>&1")
+       luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+end
+
+s = m:section(NamedSection, "global", "travelmate")
+
+-- Interface Wizard
+
+if uplink == "" then
+       dv = s:option(DummyValue, "", translate("Interface Wizard"))
+       dv.template = "cbi/nullsection"
+
+       o = s:option(Value, "", translate("Uplink interface"))
+       o.datatype = "and(uciname,rangelength(3,15))"
+       o.default = trmiface
+       o.rmempty = false
+
+       btn = s:option(Button, "trm_iface", translate("Create Uplink Interface"),
+               translate("Create a new wireless wan uplink interface, configure it to use dhcp and ")
+               .. translate("add it to the wan zone of the firewall. This step has only to be done once."))
+       btn.inputtitle = translate("Add Interface")
+       btn.inputstyle = "apply"
+       btn.disabled = false
+       function btn.write(self, section, value)
+               local iface = o:formvalue(section)
+               if iface then
+                       uci:set("travelmate", section, "trm_iface", iface)
+                       uci:save("travelmate")
+                       uci:commit("travelmate")
+                       local net = nw:add_network(iface, { proto = "dhcp" })
+                       if net then
+                               nw:save("network")
+                               nw:commit("network")
+                               local zone = fw:get_zone_by_network("wan")
+                               if zone then
+                                       zone:add_network(iface)
+                                       fw:save("firewall")
+                                       fw:commit("firewall")
+                               end
+                       end
+                       luci.sys.call("env -i /bin/ubus call network reload >/dev/null 2>&1")
+               end
+               luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+       end
+       return m
+end
+
+-- Main travelmate options
+
+o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
+       translate("Keep travelmate in an active state. Check every n seconds the connection status, i.e. the uplink availability."))
+o2.default = o2.enabled
+o2.rmempty = false
+
+btn = s:option(Button, "", translate("Manual Rescan"))
+btn:depends("trm_automatic", "")
+btn.inputtitle = translate("Rescan")
+btn.inputstyle = "find"
+btn.disabled = false
+function btn.write()
+       luci.sys.call("env -i /etc/init.d/travelmate start >/dev/null 2>&1")
+       luci.http.redirect(luci.dispatcher.build_url("admin", "services", "travelmate"))
+end
+
+o3 = s:option(Value, "trm_iface", translate("Uplink / Trigger interface"),
+       translate("Name of the uplink interface that triggers travelmate processing in 'manual' mode."))
+o3.datatype = "and(uciname,rangelength(3,15))"
+o3.default = trmiface
+o3.rmempty = false
+
+o4 = s:option(Value, "trm_triggerdelay", translate("Trigger delay"),
+       translate("Additional trigger delay in seconds before travelmate processing begins."))
+o4.default = 2
+o4.datatype = "range(1,90)"
+o4.rmempty = false
+
+o5 = s:option(Flag, "trm_debug", translate("Enable verbose debug logging"))
+o5.default = o5.disabled
+o5.rmempty = false
+
+-- Runtime information
+
+ds = s:option(DummyValue, "_dummy", translate("Runtime information"))
+ds.template = "cbi/nullsection"
+
+dv1 = s:option(DummyValue, "status", translate("Online Status"))
+dv1.template = "travelmate/runtime"
+if parse == nil then
+       dv1.value = translate("n/a")
+elseif parse.data.station_connection == "true" then
+       dv1.value = translate("connected")
+else
+       dv1.value = translate("not connected")
+end
+
+dv2 = s:option(DummyValue, "travelmate_version", translate("Travelmate version"))
+dv2.template = "travelmate/runtime"
+if parse ~= nil then
+       dv2.value = parse.data.travelmate_version or translate("n/a")
+else
+       dv2.value = translate("n/a")
+end
+
+dv3 = s:option(DummyValue, "station_ssid", translate("Station SSID"))
+dv3.template = "travelmate/runtime"
+if parse ~= nil then
+       dv3.value = parse.data.station_ssid or translate("n/a")
+else
+       dv3.value = translate("n/a")
+end
+
+dv4 = s:option(DummyValue, "station_interface", translate("Station Interface"))
+dv4.template = "travelmate/runtime"
+if parse ~= nil then
+       dv4.value = parse.data.station_interface or translate("n/a")
+else
+       dv4.value = translate("n/a")
+end
+
+dv5 = s:option(DummyValue, "station_radio", translate("Station Radio"))
+dv5.template = "travelmate/runtime"
+if parse ~= nil then
+       dv5.value = parse.data.station_radio or translate("n/a")
+else
+       dv5.value = translate("n/a")
+end
+
+dv6 = s:option(DummyValue, "last_rundate", translate("Last rundate"))
+dv6.template = "travelmate/runtime"
+if parse ~= nil then
+       dv6.value = parse.data.last_rundate or translate("n/a")
+else
+       dv6.value = translate("n/a")
+end
+
+-- Extra options
+
+e = m:section(NamedSection, "global", "travelmate", translate("Extra options"),
+translate("Options for further tweaking in case the defaults are not suitable for you."))
+
+e1 = e:option(Value, "trm_radio", translate("Radio selection"),
+       translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'."))
+e1.datatype = "and(uciname,rangelength(6,6))"
+e1.rmempty = true
+
+e2 = e:option(Value, "trm_maxretry", translate("Connection Limit"),
+       translate("How many times should travelmate try to connect to an Uplink. ")
+       .. translate("To disable this feature set it to '0' which means unlimited retries."))
+e2.default = 3
+e2.datatype = "range(0,30)"
+e2.rmempty = false
+
+e3 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
+       translate("How long should travelmate wait for a successful wlan interface reload."))
+e3.default = 30
+e3.datatype = "range(5,60)"
+e3.rmempty = false
+
+e4 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
+       translate("Timeout in seconds between retries in 'automatic' mode."))
+e4.default = 60
+e4.datatype = "range(60,300)"
+e4.rmempty = false
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
new file mode 100644 (file)
index 0000000..dcfa17c
--- /dev/null
@@ -0,0 +1,70 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+local trmiface = uci.get("travelmate", "global", "trm_iface") or "trm_wwan"
+
+m = SimpleForm("add", translate("Add Wireless Uplink Configuration"))
+m.submit = translate("Save")
+m.cancel = translate("Back to overview")
+m.reset = false
+
+function m.on_cancel()
+       http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+m.hidden = {
+       device      = http.formvalue("device"),
+       ssid        = http.formvalue("ssid"),
+       wep         = http.formvalue("wep"),
+       wpa_suites  = http.formvalue("wpa_suites"),
+       wpa_version = http.formvalue("wpa_version")
+}
+
+if m.hidden.ssid ~= "" then
+       wssid = m:field(Value, "ssid", translate("SSID"))
+       wssid.default = m.hidden.ssid
+else
+       wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
+end
+
+if (tonumber(m.hidden.wep) or 0) == 1 then
+       wkey = m:field(Value, "key", translate("WEP passphrase"),
+               translate("Specify the secret encryption key here."))
+       wkey.password = true
+       wkey.datatype = "wepkey"
+elseif (tonumber(m.hidden.wpa_version) or 0) > 0 and
+       (m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2")
+then
+       wkey = m:field(Value, "key", translate("WPA passphrase"),
+               translate("Specify the secret encryption key here."))
+       wkey.password = true
+       wkey.datatype = "wpakey"
+end
+
+function wssid.write(self, section, value)
+       newsection = uci:section("wireless", "wifi-iface", nil, {
+               mode     = "sta",
+               network  = trmiface,
+               device   = m.hidden.device,
+               ssid     = wssid:formvalue(section),
+               disabled = "1"
+       })
+       if (tonumber(m.hidden.wep) or 0) == 1 then
+               uci:set("wireless", newsection, "encryption", "wep-open")
+               uci:set("wireless", newsection, "key", "1")
+               uci:set("wireless", newsection, "key1", wkey:formvalue(section))
+       elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
+               uci:set("wireless", newsection, "encryption", "psk2")
+               uci:set("wireless", newsection, "key", wkey:formvalue(section))
+       else
+               uci:set("wireless", newsection, "encryption", "none")
+       end
+       uci:save("wireless")
+       uci:commit("wireless")
+       http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
new file mode 100644 (file)
index 0000000..0c3cc18
--- /dev/null
@@ -0,0 +1,13 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+local cfg = http.formvalue("cfg")
+
+if cfg ~= nil then
+       uci:delete("wireless", cfg)
+       uci:save("wireless")
+       uci:commit("wireless")
+end
+http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
new file mode 100644 (file)
index 0000000..c60ff22
--- /dev/null
@@ -0,0 +1,56 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local fs = require("nixio.fs")
+local uci = require("luci.model.uci").cursor()
+local http = require("luci.http")
+
+m = SimpleForm("edit", translate("Edit Wireless Uplink Configuration"))
+m.submit = translate("Save")
+m.cancel = translate("Back to overview")
+m.reset = false
+
+function m.on_cancel()
+       http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+m.hidden = {
+       cfg = http.formvalue("cfg")
+}
+
+local s = uci:get_all("wireless", m.hidden.cfg)
+if s ~= nil then
+       wssid = m:field(Value, "ssid", translate("SSID"))
+       wssid.default = s.ssid
+       wssid.datatype = "rangelength(1,32)"
+       if s.encryption and s.key then
+               wkey = m:field(Value, "key", translatef("Passphrase (%s)", s.encryption))
+       elseif s.encryption and s.password then
+               wkey = m:field(Value, "password", translatef("Passphrase (%s)", s.encryption))
+       end
+       if s.encryption and (s.key or s.password) then
+               wkey.password = true
+               wkey.default = s.key or s.password
+               if s.encryption == "wep" then
+                       wkey.datatype = "wepkey"
+               else
+                       wkey.datatype = "wpakey"
+               end
+       end
+else
+       m.on_cancel()
+end
+
+function wssid.write(self, section, value)
+       uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
+       if s.encryption and s.key then
+               uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section))
+       elseif s.encryption and s.password then
+               uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section))
+       end
+       uci:save("wireless")
+       uci:commit("wireless")
+       m.on_cancel()
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
new file mode 100644 (file)
index 0000000..6eb4c72
--- /dev/null
@@ -0,0 +1,36 @@
+-- Copyright 2017 Dirk Brenken (dev@brenken.org)
+-- This is free software, licensed under the Apache License, Version 2.0
+
+local http = require("luci.http")
+local cfg = http.formvalue("cfg")
+local dir = http.formvalue("dir")
+local uci = require("luci.model.uci").cursor()
+local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
+
+if cfg ~= nil then
+       local section = ""
+       local idx = ""
+       local idx_change = ""
+       local changed = ""
+       uci:foreach("wireless", "wifi-iface", function(s)
+               local iface = s.network or ""
+               if iface == trmiface then
+                       section = s['.name']
+                       if cfg == section then
+                               idx = s['.index']
+                       else
+                               idx_change = s['.index']
+                       end
+                       if (dir == "up" and idx ~= "" and idx_change ~= "" and idx_change < idx) or
+                               (dir == "down" and idx ~= "" and idx_change ~= "" and idx_change > idx) then
+                               changed = uci:reorder("wireless", cfg, idx_change)
+                               idx = ""
+                       end
+               end
+       end)
+       if changed ~= "" then
+               uci:save("wireless")
+               uci:commit("wireless")
+       end
+end
+http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
new file mode 100644 (file)
index 0000000..53493a1
--- /dev/null
@@ -0,0 +1,10 @@
+<style type="text/css">
+       textarea
+       {
+               border: 1px solid #cccccc;
+               padding: 5px;
+               font-size: 12px;
+               font-family: monospace;
+               resize: none;
+       }
+</style>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
new file mode 100644 (file)
index 0000000..7f6ff77
--- /dev/null
@@ -0,0 +1,15 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+       <fieldset class="cbi-section">
+               <div class="cbi-section-descr"><%:This form shows the syslog output, pre-filtered for travelmate related messages only.%></div>
+               <textarea id="logread_id" style="width: 100%; height: 450px; border: 1px solid #cccccc; padding: 5px; font-size: 12px; font-family: monospace; resize: none;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+       </fieldset>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
new file mode 100644 (file)
index 0000000..2b98855
--- /dev/null
@@ -0,0 +1,10 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%+cbi/valueheader%>
+
+<input name="runtime" id="runtime" type="text" class="cbi-input-text" style="border:none; box-shadow:none; background-color:#ffffff; color:#0069d6;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
new file mode 100644 (file)
index 0000000..cbb6c18
--- /dev/null
@@ -0,0 +1,77 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%-
+  local write = io.write
+  local uci = require("luci.model.uci").cursor()
+  local trmiface = uci:get("travelmate", "global", "trm_iface") or "trm_wwan"
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+<h2 name="content"><%:Wireless Stations%></h2>
+<div class="cbi-map-descr">
+  <%=translatef("Provides an overview of all configured uplinks for the travelmate interface (%s). You can edit, delete or re-order existing uplinks or scan for a new one. The currently used uplink is emphasized in blue.", trmiface)%>
+</div>
+
+<fieldset class="cbi-section">
+  <table class="cbi-section-table" style="empty-cells:hide">
+    <tr class="cbi-section-table-titles">
+      <th class="cbi-section-table-cell" style="text-align:left"><%:Device%></th>
+      <th class="cbi-section-table-cell" style="text-align:left"><%:SSID%></th>
+      <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
+      <th class="cbi-section-table-cell" style="text-align:center" colspan="2"><%:Actions%></th>
+    </tr>
+<%
+  uci:foreach("wireless", "wifi-iface", function(s)
+    local iface = s.network or ""
+    if iface == trmiface then
+      local section = s['.name'] or ""
+      local device = s.device or ""
+      local ssid = s.ssid or ""
+      local encryption = s.encryption or ""
+      local disabled = s.disabled or ""
+      local style = "color:#000000"
+      if disabled == "0" then
+        style = "color:#0069d6;font-weight:bold"
+      end
+%>
+    <tr class="cbi-section-table-row cbi-rowstyle-1" style="<%=style%>">
+      <td style="text-align:left"><%=device%></td>
+      <td style="text-align:left"><%=ssid%></td>
+      <td style="text-align:left"><%=encryption%></td>
+      <td class="cbi-value-field" style="width:70px;text-align:right">
+        <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=up'" alt="<%:Move up%>" title="<%:Move up%>"/>
+        <input class="cbi-button cbi-button-down" type="button" value="" onclick="location.href='<%=url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
+      </td>
+      <td class="cbi-value-field" style="width:150px;text-align:right">
+        <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=url('admin/services/travelmate/wifiedit')%>?cfg=<%=section%>'" title="<%:Edit this Uplink%>" value="<%:Edit%>"/>
+        <input type="button" class="cbi-button cbi-button-remove" onclick="location.href='<%=url('admin/services/travelmate/wifidelete')%>?cfg=<%=section%>'" title="<%:Delete this Uplink%>" value="<%:Delete%>"/>
+      </td>
+    </tr>
+<%
+    end
+  end)
+%>
+  </table>
+</fieldset>
+<div class="cbi-page-actions right">
+<%
+  uci:foreach("wireless", "wifi-device", function(s)
+    local device = s[".name"]
+%>
+  <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+    <input type="hidden" name="device" value="<%=device%>"/>
+    <input type="hidden" name="token" value="<%=token%>"/>
+    <input type="submit" class="cbi-button cbi-button-find" title="<%:Find and join network on %><%=device%>" value="<%:Scan %><%=device%>"/>
+  </form>
+<%
+  end)
+%>
+</div>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
new file mode 100644 (file)
index 0000000..af90c18
--- /dev/null
@@ -0,0 +1,90 @@
+<%#
+Copyright 2017 Dirk Brenken (dev@brenken.org)
+This is free software, licensed under the Apache License, Version 2.0
+-%>
+
+<%-
+    local sys = require("luci.sys")
+    local utl = require("luci.util")
+    local dev = luci.http.formvalue("device")
+    local iw = luci.sys.wifi.getiwinfo(dev)
+
+    if not iw then
+        luci.http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+    end
+
+    function format_wifi_encryption(info)
+        if info.wep == true then
+            return translate("WEP")
+        elseif info.wpa > 0 then
+            return translate("WPA / WPA2")
+        elseif info.enabled then
+            return translate("Unknown")
+        else
+            return translate("Open")
+        end
+    end
+
+    function percent_wifi_signal(info)
+        local qc = info.quality or 0
+        local qm = info.quality_max or 0
+        if info.ssid and qc > 0 and qm > 0 then
+            return math.floor((100 / qm) * qc)
+        else
+            return 0
+        end
+    end
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+<h2 name="content"><%:Wireless Scan%></h2>
+    <fieldset class="cbi-section">
+        <table class="cbi-section-table" style="empty-cells:hide">
+            <tr class="cbi-section-table-titles">
+                <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></th>
+                <th class="cbi-section-table-cell" style="text-align:left"><%:Encryption%></th>
+                <th class="cbi-section-table-cell" style="text-align:left" colspan="2"><%:Signal strength%></th>
+            </tr>
+            <% for i, net in ipairs(iw.scanlist or { }) do %>
+            <tr class="cbi-section-table-row cbi-rowstyle-1">
+                <td class="cbi-value-field" style="text-align:left">
+                    <strong><%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%></strong>
+                </td>
+                <td class="cbi-value-field" style="text-align:left">
+                    <%=format_wifi_encryption(net.encryption)%>
+                </td>
+                <td class="cbi-value-field" style="text-align:left">
+                    <%=percent_wifi_signal(net)%> %
+                </td>
+                <td class="cbi-value-field" style="width:100px;text-align:right">
+                    <form class="inline" action="<%=url('admin/services/travelmate/wifiadd')%>" method="post">
+                        <input type="hidden" name="token" value="<%=token%>"/>
+                        <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
+                        <input type="hidden" name="ssid" value="<%=utl.pcdata(net.ssid)%>"/>
+                        <input type="hidden" name="wep" value="<%=net.encryption.wep and 1 or 0%>"/>
+                        <% if net.encryption.wpa then %>
+                        <input type="hidden" name="wpa_version" value="<%=net.encryption.wpa%>"/>
+                        <% for _, v in ipairs(net.encryption.auth_suites) do %><input type="hidden" name="wpa_suites" value="<%=v%>"/>
+                        <% end; end %>
+                        <input class="cbi-button cbi-button-apply" type="submit" value="<%:Add Uplink%>"/>
+                    </form>
+                </td>
+            </tr>
+            <% end %>
+        </table>
+    </fieldset>
+<div class="cbi-page-actions right">
+    <form class="inline" action="<%=url('admin/services/travelmate/wifiscan')%>" method="post">
+        <input type="hidden" name="token" value="<%=token%>"/>
+        <input type="hidden" name="device" value="<%=utl.pcdata(dev)%>"/>
+        <input class="cbi-button cbi-input-find" type="submit" value="<%:Repeat scan%>"/>
+    </form>
+    <form class="inline" action="<%=url('admin/services/travelmate/stations')%>" method="post">
+        <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/>
+    </form>
+</div>
+</div>
+
+<%+footer%>
index de1acee..febdbd5 100644 (file)
@@ -7,85 +7,321 @@ msgstr ""
 "Language-Team: \n"
 "MIME-Version: 1.0\n"
 "Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.8.11\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 "Actions"
+msgstr "操作"
+
+msgid "Add Interface"
+msgstr "インターフェースの追加"
+
+msgid "Add Uplink"
+msgstr "アップリンクの追加"
+
+msgid "Add Wireless Uplink Configuration"
+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は、登録されている順序で既知の無線クライアント インターフェースへの"
-"接続を試行します。"
+"Additional trigger delay in seconds before travelmate processing begins."
+msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間(秒)です。"
+
+msgid "Advanced"
+msgstr "詳細設定"
+
+msgid "Back to overview"
+msgstr "概要へ戻る"
 
 msgid ""
-"Configuration of the Travelmate package to enable travel router "
+"Configuration of the travelmate package to to enable travel router "
 "functionality."
-msgstr "トラベル ルータ機能を有効にする、Travelmate パッケージの設定です。"
+msgstr ""
+"トラベル ルーター機能を有効化するための、 Travelmate パッケージの設定です。"
+
+msgid "Connection Limit"
+msgstr "接続制限"
 
-msgid "Debug logging"
-msgstr "デバッグ ログ"
+msgid "Create Uplink Interface"
+msgstr "アップリンク インターフェースの作成"
+
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+"新規の無線 WAN アップリンク インターフェースを作成し、 DHCP を使用するよう構"
+"成して"
 
-msgid "Default 20, range 10-60"
-msgstr "既定値 20、範囲 10 - 60"
+msgid "Delete"
+msgstr "削除"
 
-msgid "Default 3, range 1-10"
-msgstr "既定値 3、範囲 1 - 10"
+msgid "Delete this Uplink"
+msgstr "このアップリンクを削除"
 
-msgid "Disable this if you want to use iwinfo instead of iw"
-msgstr "iw の代わりに iwinfo を使用したい場合、この設定を無効にします。"
+msgid "Device"
+msgstr "デバイス"
 
-msgid "Enable Travelmate"
-msgstr "Travelmateの有効化"
+msgid "Edit"
+msgstr "編集"
+
+msgid "Edit Firewall Configuration"
+msgstr "ファイアウォール設定の編集"
+
+msgid "Edit Network Configuration"
+msgstr "ネットワーク設定の編集"
+
+msgid "Edit Travelmate Configuration"
+msgstr "Travelmate 設定の編集"
+
+msgid "Edit Wireless Configuration"
+msgstr "無線設定の編集"
+
+msgid "Edit Wireless Uplink Configuration"
+msgstr "無線アップリンク設定の編集"
+
+msgid "Edit this Uplink"
+msgstr "このアップリンクを編集"
+
+msgid "Enable 'automatic' mode"
+msgstr "'automatic' モードの有効化"
+
+msgid "Enable travelmate"
+msgstr "Travelmate の有効化"
+
+msgid "Enable verbose debug logging"
+msgstr "詳細なデバッグ ログの有効化"
+
+msgid "Encryption"
+msgstr "暗号化"
 
 msgid "Extra options"
 msgstr "拡張オプション"
 
-msgid "Global 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> を"
+"確認してください。"
+
+msgid "How long should travelmate wait for a successful wlan interface reload."
+msgstr ""
+"無線LAN インターフェースのリロードが成功するまでの、Travelmate の待機時間で"
+"す。"
+
+msgid "How many times should travelmate try to connect to an Uplink."
+msgstr "Travelmate がアップリンクへの接続を試行する回数です。"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
 
-msgid "Link to detailed advice"
-msgstr "詳細な解説へのリンク"
+msgid "Interface Timeout"
+msgstr "インターフェース タイムアウト"
 
-msgid "Max. number of connection retries to an uplink"
-msgstr "確立までの接続試行回数"
+msgid "Interface Wizard"
+msgstr "インターフェース ウィザード"
 
-msgid "Max. timeout in seconds for wlan interface reload"
-msgstr "無線LANインターフェース リロード時の最大待機時間(秒)"
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
+msgstr ""
+"Travelmate をアクティブ状態で維持します。\"実行間隔\" で設定された時間毎"
+"(秒)に、アップリンクの可用性を確認するために接続状態をチェックします"
+
+msgid "Last rundate"
+msgstr "最終実行日時"
 
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "リロード トリガを特定のインターフェースに限定する"
+msgid "Manual Rescan"
+msgstr "手動再スキャン"
+
+msgid "Move down"
+msgstr "下へ"
+
+msgid "Move up"
+msgstr "上へ"
 
 msgid ""
-"Space separated list of wwan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
 msgstr ""
-"リロード動作のトリガとなる、スペースで区切られたWWAN インターフェースのリスト"
-"です。リロードのトリガを無効にするには、'false' を設定します。既定値:(空)"
+"'manual' モード時に Travelmate の処理のトリガーとなる、アップリンク インター"
+"フェースの名前です。"
+
+msgid "Online Status"
+msgstr "オンライン ステータス"
+
+msgid "Open"
+msgstr "オープン"
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。"
+
+msgid "Overall Timeout"
+msgstr "実行間隔"
+
+msgid "Overview"
+msgstr "概要"
+
+msgid "Passphrase (%s)"
+msgstr "暗号フレーズ (%s)"
+
+msgid ""
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
+msgstr ""
+"Travelmate 用インターフェース(%s)に設定済みの全アップリンクの一覧です。既存"
+"のアップリンクの編集や削除、並べ替えを行ったり、スキャンを行って新規アップリ"
+"ンクを追加することができます。現在使用されているアップリンクは、青色で強調さ"
+"れます。"
+
+msgid "Radio selection"
+msgstr "無線の選択"
+
+msgid "Repeat scan"
+msgstr "再スキャン"
+
+msgid "Rescan"
+msgstr "再スキャン"
+
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
+
+msgid "Runtime information"
+msgstr "実行情報"
+
+msgid "SSID"
+msgstr "SSID"
+
+msgid "SSID (hidden)"
+msgstr "SSID(ステルス)"
+
+msgid "Save"
+msgstr "保存"
+
+msgid "Scan"
+msgstr "スキャン:"
+
+msgid "Signal strength"
+msgstr "信号強度"
+
+msgid "Specify the secret encryption key here."
+msgstr "暗号キーを設定します。"
+
+msgid "Station Interface"
+msgstr "ステーション インターフェース"
+
+msgid "Station Radio"
+msgstr "ステーション電波"
+
+msgid "Station SSID"
+msgstr "ステーション SSID"
+
+msgid ""
+"This form allows you to modify the content of the main firewall "
+"configuration file (/etc/config/firewall)."
+msgstr ""
+"このフォームでは、ファイアウォール 設定ファイル (/etc/config/firewall) の内容"
+"を変更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main network configuration "
+"file (/etc/config/network)."
+msgstr ""
+"このフォームでは、ネットワーク 設定ファイル (/etc/config/network) の内容を変"
+"更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main travelmate "
+"configuration file (/etc/config/travelmate)."
+msgstr ""
+"このフォームでは、 Travelmate 設定ファイル (/etc/config/travelmate) の内容を"
+"変更することができます。"
+
+msgid ""
+"This form allows you to modify the content of the main wireless "
+"configuration file (/etc/config/wireless)."
+msgstr ""
+"このフォームでは、無線 設定ファイル (/etc/config/wireless) の内容を変更するこ"
+"とができます。"
+
+msgid ""
+"This form shows the syslog output, pre-filtered for travelmate related "
+"messages only."
+msgstr ""
+"このフォームには、システムログ内の Travelmate に関するメッセージのみが表示さ"
+"れます。"
+
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr "'automatic' モード時に接続を確認または再試行する間隔(秒)です。"
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
+msgstr ""
+"この機能を無効にして接続の再試行を無制限にする場合、 '0' を設定します。"
 
 msgid "Travelmate"
 msgstr "Travelmate"
 
-msgid "Use iw for scanning"
-msgstr "スキャンに iw を使用する"
+msgid "Travelmate Logfile"
+msgstr "Travelmate ログファイル"
+
+msgid "Travelmate version"
+msgstr "Travelmate バージョン"
+
+msgid "Trigger delay"
+msgstr "トリガー遅延"
+
+msgid "Unknown"
+msgstr "不明"
+
+msgid "Uplink / Trigger interface"
+msgstr "アップリンク / トリガー インターフェース"
 
-#~ msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries"
-#~ msgstr "既定値 3、範囲 0 - 10。再試行回数を制限しない場合、0 に設定します。"
+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 ""
+"ファイアウォールの wan ゾーンに追加します。このステップは、一度だけ実行される"
+"必要があります。"
 
-#~ msgid "Default 30, range 5-60"
-#~ msgstr "既定値 30、範囲 5 - 60"
+msgid "connected"
+msgstr "接続済み"
 
-#~ msgid "Default: empty = use all radios."
-#~ msgstr "デフォルト:(空)= 全ての無線を使用"
+msgid "hidden"
+msgstr "(不明)"
 
-#~ msgid "Loop timeout in seconds for wlan monitoring"
-#~ msgstr "無線LAN モニターのループ タイムアウト(秒)"
+msgid "n/a"
+msgstr "利用不可"
 
-#~ msgid "Use only one radio, e.g. 'radio0'"
-#~ msgstr "単一の無線のみ使用する 例: 'radio0'"
+msgid "not connected"
+msgstr "未接続"
diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po
new file mode 100644 (file)
index 0000000..41fab70
--- /dev/null
@@ -0,0 +1,360 @@
+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 "Actions"
+msgstr ""
+
+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 ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Back to overview"
+msgstr ""
+
+msgid ""
+"Configuration of the travelmate package to to enable travel router "
+"functionality."
+msgstr ""
+
+msgid "Connection Limit"
+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 "Edit"
+msgstr ""
+
+msgid "Edit Firewall Configuration"
+msgstr ""
+
+msgid "Edit Network Configuration"
+msgstr ""
+
+msgid "Edit Travelmate Configuration"
+msgstr ""
+
+msgid "Edit Wireless Configuration"
+msgstr ""
+
+msgid "Edit Wireless Uplink Configuration"
+msgstr ""
+
+msgid "Edit this Uplink"
+msgstr ""
+
+msgid "Enable 'automatic' mode"
+msgstr ""
+
+msgid "Enable travelmate"
+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>"
+msgstr ""
+
+msgid "How long should travelmate wait for a successful wlan interface reload."
+msgstr ""
+
+msgid "How many times should travelmate try to connect to an Uplink."
+msgstr ""
+
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Interface Timeout"
+msgstr ""
+
+msgid "Interface Wizard"
+msgstr ""
+
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
+msgstr ""
+
+msgid "Last rundate"
+msgstr ""
+
+msgid "Manual Rescan"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid ""
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
+msgstr ""
+
+msgid "Online Status"
+msgstr ""
+
+msgid "Open"
+msgstr ""
+
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+
+msgid "Overall Timeout"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Passphrase (%s)"
+msgstr ""
+
+msgid ""
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
+msgstr ""
+
+msgid "Radio selection"
+msgstr ""
+
+msgid "Repeat scan"
+msgstr ""
+
+msgid "Rescan"
+msgstr ""
+
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr ""
+
+msgid "Runtime information"
+msgstr ""
+
+msgid "SSID"
+msgstr ""
+
+msgid "SSID (hidden)"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
+msgstr ""
+
+msgid "Station Interface"
+msgstr ""
+
+msgid "Station Radio"
+msgstr ""
+
+msgid "Station SSID"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main firewall "
+"configuration file (/etc/config/firewall)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main network configuration "
+"file (/etc/config/network)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main travelmate "
+"configuration file (/etc/config/travelmate)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main wireless "
+"configuration file (/etc/config/wireless)."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for travelmate related "
+"messages only."
+msgstr ""
+
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr ""
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
+msgstr ""
+
+msgid "Travelmate"
+msgstr "Travelmate"
+
+msgid "Travelmate Logfile"
+msgstr ""
+
+msgid "Travelmate version"
+msgstr ""
+
+msgid "Trigger delay"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger 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 ""
+
+msgid "connected"
+msgstr ""
+
+msgid "hidden"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "not connected"
+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 ""
+#~ "Breve conselho: Crie uma interface wwan, configure-a para usar DHCP e "
+#~ "adicione-a à zona wan no firewall. Crie as interfaces wifi a serem usadas "
+#~ "(modo 'cliente', atribuído à rede wwan, deixado como desativado). O "
+#~ "Travelmate tentará se conectar às interfaces de cliente wifi conhecidas "
+#~ "na ordem definida."
+
+#~ msgid ""
+#~ "Configuration of the Travelmate package to enable travel router "
+#~ "functionality."
+#~ msgstr ""
+#~ "Configuração do pacote Travelmate para permitir a funcionalidade de "
+#~ "roteador de viagem."
+
+#~ msgid "Debug logging"
+#~ msgstr "Registros(log) para depuração"
+
+#~ msgid "Default 20, range 10-60"
+#~ msgstr "Padrão 20, faixa 10-60"
+
+#~ msgid "Default 3, range 1-10"
+#~ msgstr "Padrão 3, faixa 1-10"
+
+#~ msgid "Disable this if you want to use iwinfo instead of iw"
+#~ msgstr "Desabilite isto se você quer usar o iwinfo ao invés do iw"
+
+#~ msgid "Enable Travelmate"
+#~ msgstr "Habilitar o Travelmate"
+
+#~ msgid "Global options"
+#~ msgstr "Opções Globais"
+
+#~ msgid "Link to detailed advice"
+#~ msgstr "Endereço para conselhos detalhados"
+
+#~ msgid "Max. number of connection retries to an uplink"
+#~ msgstr "Máximo número de tentativas de conexão para um enlace"
+
+#~ msgid "Max. timeout in seconds for wlan interface reload"
+#~ msgstr "Tempo limite máximo em segundos para recarregar a interface wlan"
+
+#~ msgid "Restrict reload trigger to certain interface(s)"
+#~ msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
+
+#~ msgid ""
+#~ "Space separated list of wwan interfaces that trigger reload action. To "
+#~ "disable reload trigger set it to 'false'. Default: empty"
+#~ msgstr ""
+#~ "Lista separada por espaços de interfaces wwan que acionam a ação de "
+#~ "recarga. Para desabilitar o gatilho de recarga, defina-o como 'false'. "
+#~ "Padrão: vazio"
+
+#~ msgid "Use iw for scanning"
+#~ msgstr "Use o iw para escaneamento"
index 2062819..a9ceafe 100644 (file)
 msgid ""
 msgstr "Content-Type: text/plain; charset=UTF-8"
 
+msgid "Actions"
+msgstr ""
+
+msgid "Add Interface"
+msgstr ""
+
+msgid "Add Uplink"
+msgstr ""
+
+msgid "Add Wireless Uplink Configuration"
+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."
+"Additional trigger delay in seconds before travelmate processing begins."
+msgstr ""
+
+msgid "Advanced"
+msgstr ""
+
+msgid "Back to overview"
 msgstr ""
 
 msgid ""
-"Configuration of the Travelmate package to enable travel router "
+"Configuration of the travelmate package to to enable travel router "
 "functionality."
 msgstr ""
 
-msgid "Debug logging"
+msgid "Connection Limit"
+msgstr ""
+
+msgid "Create Uplink Interface"
+msgstr ""
+
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
 msgstr ""
 
-msgid "Default 20, range 10-60"
+msgid "Delete"
 msgstr ""
 
-msgid "Default 3, range 1-10"
+msgid "Delete this Uplink"
 msgstr ""
 
-msgid "Disable this if you want to use iwinfo instead of iw"
+msgid "Device"
 msgstr ""
 
-msgid "Enable Travelmate"
+msgid "Edit"
+msgstr ""
+
+msgid "Edit Firewall Configuration"
+msgstr ""
+
+msgid "Edit Network Configuration"
+msgstr ""
+
+msgid "Edit Travelmate Configuration"
+msgstr ""
+
+msgid "Edit Wireless Configuration"
+msgstr ""
+
+msgid "Edit Wireless Uplink Configuration"
+msgstr ""
+
+msgid "Edit this Uplink"
+msgstr ""
+
+msgid "Enable 'automatic' mode"
+msgstr ""
+
+msgid "Enable travelmate"
+msgstr ""
+
+msgid "Enable verbose debug logging"
+msgstr ""
+
+msgid "Encryption"
 msgstr ""
 
 msgid "Extra options"
 msgstr ""
 
-msgid "Global options"
+msgid "Find and join network on"
 msgstr ""
 
-msgid "Link to detailed advice"
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
 msgstr ""
 
-msgid "Max. number of connection retries to an uplink"
+msgid "How long should travelmate wait for a successful wlan interface reload."
 msgstr ""
 
-msgid "Max. timeout in seconds for wlan interface reload"
+msgid "How many times should travelmate try to connect to an Uplink."
 msgstr ""
 
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Input file not found, please check your configuration."
+msgstr ""
+
+msgid "Interface Timeout"
+msgstr ""
+
+msgid "Interface Wizard"
+msgstr ""
+
+msgid ""
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
+msgstr ""
+
+msgid "Last rundate"
+msgstr ""
+
+msgid "Manual Rescan"
+msgstr ""
+
+msgid "Move down"
+msgstr ""
+
+msgid "Move up"
+msgstr ""
+
+msgid ""
+"Name of the uplink interface that triggers travelmate processing in 'manual' "
+"mode."
+msgstr ""
+
+msgid "Online Status"
+msgstr ""
+
+msgid "Open"
 msgstr ""
 
 msgid ""
-"Space separated list of wwan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr ""
+
+msgid "Overall Timeout"
+msgstr ""
+
+msgid "Overview"
+msgstr ""
+
+msgid "Passphrase (%s)"
+msgstr ""
+
+msgid ""
+"Provides an overview of all configured uplinks for the travelmate interface "
+"(%s). You can edit, delete or re-order existing uplinks or scan for a new "
+"one. The currently used uplink is emphasized in blue."
+msgstr ""
+
+msgid "Radio selection"
+msgstr ""
+
+msgid "Repeat scan"
+msgstr ""
+
+msgid "Rescan"
+msgstr ""
+
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr ""
+
+msgid "Runtime information"
+msgstr ""
+
+msgid "SSID"
+msgstr ""
+
+msgid "SSID (hidden)"
+msgstr ""
+
+msgid "Save"
+msgstr ""
+
+msgid "Scan"
+msgstr ""
+
+msgid "Signal strength"
+msgstr ""
+
+msgid "Specify the secret encryption key here."
+msgstr ""
+
+msgid "Station Interface"
+msgstr ""
+
+msgid "Station Radio"
+msgstr ""
+
+msgid "Station SSID"
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main firewall "
+"configuration file (/etc/config/firewall)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main network configuration "
+"file (/etc/config/network)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main travelmate "
+"configuration file (/etc/config/travelmate)."
+msgstr ""
+
+msgid ""
+"This form allows you to modify the content of the main wireless "
+"configuration file (/etc/config/wireless)."
+msgstr ""
+
+msgid ""
+"This form shows the syslog output, pre-filtered for travelmate related "
+"messages only."
+msgstr ""
+
+msgid "Timeout in seconds between retries in 'automatic' mode."
+msgstr ""
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
 msgstr ""
 
 msgid "Travelmate"
 msgstr ""
 
-msgid "Use iw for scanning"
+msgid "Travelmate Logfile"
+msgstr ""
+
+msgid "Travelmate version"
+msgstr ""
+
+msgid "Trigger delay"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger 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 ""
+
+msgid "connected"
+msgstr ""
+
+msgid "hidden"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "not connected"
 msgstr ""
index 9a2cf46..3014770 100644 (file)
@@ -11,16 +11,9 @@ LUCI_TITLE:=uHTTPd Webserver Configuration
 LUCI_DEPENDS:=+uhttpd
 LUCI_PKGARCH:=all
 
-PKG_NAME:=luci-app-uhttpd
-PKG_VERSION:=1.0.0
-PKG_RELEASE:=1
 PKG_LICENSE:=Apache-2.0
 PKG_MAINTAINER:=Daniel Dickinson <openwrt@daniel.thecshore.com>
 
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
 LUA_TARGET:=source
 
 include ../../luci.mk
index 03821ad..883e1bb 100644 (file)
@@ -202,14 +202,17 @@ o = ucs:taboption("advanced", Value, "max_requests", translate("Maximum number o
 o.optional = true
 o.datatype = "uinteger"
 
-local s = m:section(NamedSection, "px5g", "cert", translate("uHTTPd Self-signed Certificate Parameters"))
+local s = m:section(TypedSection, "cert", translate("uHTTPd Self-signed Certificate Parameters"))
+
+s.template  = "cbi/tsection"
+s.anonymous = true
 
 o = s:option(Value, "days", translate("Valid for # of Days"))
 o.default = 730
 o.datatype = "uinteger"
 
 o = s:option(Value, "bits", translate("Length of key in bits"))
-o.default = 1024
+o.default = 2048
 o.datatype = "min(1024)"
 
 o = s:option(Value, "commonname", translate("Server Hostname"), translate("a.k.a CommonName"))
@@ -222,6 +225,6 @@ o = s:option(Value, "state", translate("State"))
 o.default = "Unknown"
 
 o = s:option(Value, "location", translate("Location"))
-o.default = "Somewhere"
+o.default = "Unknown"
 
 return m
diff --git a/applications/luci-app-uhttpd/po/pt-br/uhttpd.po b/applications/luci-app-uhttpd/po/pt-br/uhttpd.po
new file mode 100644 (file)
index 0000000..af68b9e
--- /dev/null
@@ -0,0 +1,208 @@
+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 ""
+"(/old/path=/new/path) or (just /old/path which becomes /cgi-prefix/old/path)"
+msgstr ""
+"(/old/path=/new/path) ou (just /old/path que se torna /cgi-prefix/old/path)"
+
+msgid "404 Error"
+msgstr "Erro 404"
+
+msgid "A lightweight single-threaded HTTP(S) server"
+msgstr "Um servidor HTTP(S) leve de únida thread."
+
+msgid "Advanced Settings"
+msgstr "Opções Avançadas"
+
+msgid "Aliases"
+msgstr "Pseudônimos (Aliases)"
+
+msgid "Base directory for files to be served"
+msgstr "Diretório Base para publicar arquivos"
+
+msgid "Bind to specific interface:port (by specifying interface address"
+msgstr ""
+"Escute em uma interface:porta específica (especificando o endereço da "
+"interface"
+
+msgid "CGI filetype handler"
+msgstr "Interpretador de tipo de arquivo CGI"
+
+msgid "CGI is disabled if not present."
+msgstr "O CGI estará desabilitado se não presente."
+
+msgid "Config file (e.g. for credentials for Basic Auth)"
+msgstr "Arquivo de configuração (ex: credenciais para autenticação básica)"
+
+msgid "Connection reuse"
+msgstr "Reutilizar conexão"
+
+msgid "Country"
+msgstr "País"
+
+msgid "Disable JSON-RPC authorization via ubus session API"
+msgstr "Desabilita a autorização JSON-RPC através da API de sessão ubus"
+
+msgid "Do not follow symlinks outside document root"
+msgstr "Não siga ligações simbólicas (symlinks) para fora do documento raiz"
+
+msgid "Do not generate directory listings."
+msgstr "Não gere listagens de diretórios"
+
+msgid "Document root"
+msgstr "Documento Raiz"
+
+msgid "E.g specify with index.html and index.php when using PHP"
+msgstr "Ex: use index.html e index.php quando usar PHP"
+
+msgid "Embedded Lua interpreter is disabled if not present."
+msgstr "O interpretador Lua embutido será desabilitado se não presente."
+
+msgid "Enable JSON-RPC Cross-Origin Resource Support"
+msgstr "Habilite o suporte para recursos JSON-RPC de origem cruzada"
+
+msgid "For settings primarily geared to serving more than the web UI"
+msgstr "Para ajustes envolvidos com mais do que prover a interface web"
+
+msgid "Full Web Server Settings"
+msgstr "Configurações Completas do Servidor Web"
+
+msgid "Full real path to handler for Lua scripts"
+msgstr "Caminho completo para o interpretador de scripts Lua"
+
+msgid "General Settings"
+msgstr "Configurações Gerais"
+
+msgid "HTTP listeners (address:port)"
+msgstr "Escutas do HTTP (endereço:porta)"
+
+msgid "HTTPS Certificate (DER Encoded)"
+msgstr "Certificado do HTTPS (codificado em formato PEM)"
+
+msgid "HTTPS Private Key (DER Encoded)"
+msgstr "Chave Privada do HTTPS (codificado como DER)"
+
+msgid "HTTPS listener (address:port)"
+msgstr "Escuta do HTTPS (endereço:porta)"
+
+msgid "Ignore private IPs on public interface"
+msgstr "Ignore endereços IP privados na interface pública"
+
+msgid "Index page(s)"
+msgstr "Página(s) Índice(s)"
+
+msgid ""
+"Interpreter to associate with file endings ('suffix=handler', e.g. '.php=/"
+"usr/bin/php-cgi')"
+msgstr ""
+"Interpretador para associar com extensões de arquivos "
+"('extensão=interpretador', ex: '.php=/usr/bin/php-cgi')"
+
+msgid "Length of key in bits"
+msgstr "Comprimento da chave em bits"
+
+msgid "Location"
+msgstr "Localização"
+
+msgid "Maximum number of connections"
+msgstr "Número máximo de requisições para script"
+
+msgid "Maximum number of script requests"
+msgstr "Número máximo de requisições para script"
+
+msgid "Maximum wait time for Lua, CGI, or ubus execution"
+msgstr "Tempo máximo de espera para execuções de Lua, CGI ou ubus"
+
+msgid "Maximum wait time for network activity"
+msgstr "Tempo máximo de espera para atividade na rede"
+
+msgid "Override path for ubus socket"
+msgstr "Sobrescrever o caminho do socket ubus"
+
+msgid "Path prefix for CGI scripts"
+msgstr "Prefixo do caminho para scripts CGI"
+
+msgid ""
+"Prevent access from private (RFC1918) IPs on an interface if it has an "
+"public IP address"
+msgstr ""
+"Evite acesso de endereços privados (RFC1918) na interface que tem um "
+"endereço IP público"
+
+msgid "Realm for Basic Auth"
+msgstr "Reino para Autenticação Simples"
+
+msgid "Redirect all HTTP to HTTPS"
+msgstr "Redirecionar todo tráfego HTTP para HTTPS"
+
+msgid "Remove configuration for certificate and key"
+msgstr "Remove a configuração para o certificado e chave"
+
+msgid "Remove old certificate and key"
+msgstr "Remove os certificados e chaves antigas"
+
+msgid "Server Hostname"
+msgstr "Nome do Servidor"
+
+msgid ""
+"Settings which are either rarely needed or which affect serving the WebUI"
+msgstr "Ajustes que são raramente usadas ou que afetam a interface web"
+
+msgid "State"
+msgstr "Estado"
+
+msgid "TCP Keepalive"
+msgstr "Manter conexões TCP abertas (Keepalive)"
+
+msgid "This permanently deletes the cert, key, and configuration to use same."
+msgstr "Isto apaga permanentemente o certificado, a chave e a configuração."
+
+msgid "Valid for # of Days"
+msgstr "Valido por # dias"
+
+msgid ""
+"Virtual URL or CGI script to display on status '404 Not Found'. Must begin "
+"with '/'"
+msgstr ""
+"URL virtual ou script CGI para mostrar quando ocorrer erro '404 Não "
+"Encontrado'. Deve começar com '/'"
+
+msgid "Virtual path prefix for Lua scripts"
+msgstr "Prefixo do caminho virtual para scripts Lua"
+
+msgid "Virtual path prefix for ubus via JSON-RPC integration"
+msgstr "Prefixo do caminho virtual para o ubus através da integração JSON-RPC"
+
+msgid "Will not use HTTP authentication if not present"
+msgstr "Não usar autenticação HTTP se não presente"
+
+msgid "a.k.a CommonName"
+msgstr "também conhecido como Nome Comum"
+
+msgid "uHTTPd"
+msgstr "uHTTPd"
+
+msgid "uHTTPd Self-signed Certificate Parameters"
+msgstr "Parâmetros do Certificado Auto-assinado do uHTTPd"
+
+msgid ""
+"uHTTPd will generate a new self-signed certificate using the configuration "
+"shown below."
+msgstr ""
+"o uHTTPd gerará um certificado auto-assinado usando a configuração mostrada "
+"abaixo."
+
+msgid "ubus integration is disabled if not present"
+msgstr "A integração com o ubus será desativada se não presente"
index 0a5abc5..b44bf03 100644 (file)
 -- Copyright 2008 Steven Barth <steven@midlink.org>
 -- Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+-- Copyright 2017 Eric Luehrsen <ericluehrsen@hotmail.com>
 -- Licensed to the public under the Apache License 2.0.
 
 module("luci.controller.unbound", package.seeall)
 
+
 function index()
-       if not nixio.fs.access("/etc/config/unbound") then
-               return
-       end
+  local ucl = luci.model.uci.cursor()
+  local valexp = ucl:get_first("unbound", "unbound", "extended_luci")
+  local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+
+  if not nixio.fs.access("/etc/config/unbound") then
+    return
+  end
+
+
+  if valexp == "1" then
+    -- Expanded View
+    entry({"admin", "services", "unbound"}, firstchild(), _("Recursive DNS")).dependent = false
+
+    -- UCI Tab(s)
+    entry({"admin", "services", "unbound", "configure"}, cbi("unbound/configure"), _("Settings"), 10)
+
+    -- Status Tab(s)
+    entry({"admin", "services", "unbound", "status"}, firstchild(), _("Status"), 20)
+    entry({"admin", "services", "unbound", "status", "syslog"}, call("QuerySysLog"), _("Log"), 50).leaf = true
+
+
+    if nixio.fs.access("/usr/sbin/unbound-control") then
+      -- Require unbound-control to execute
+      entry({"admin", "services", "unbound", "status", "statistics"}, call("QueryStatistics"), _("Statistics"), 10).leaf = true
+      entry({"admin", "services", "unbound", "status", "localdata"}, call("QueryLocalData"), _("Local Data"), 20).leaf = true
+      entry({"admin", "services", "unbound", "status", "localzone"}, call("QueryLocalZone"), _("Local Zones"), 30).leaf = true
+
+    else
+      entry({"admin", "services", "unbound", "status", "statistics"}, call("ShowEmpty"), _("Statistics"), 10).leaf = true
+    end
+
+
+    -- Raw File Tab(s)
+    entry({"admin", "services", "unbound", "files"}, firstchild(), _("Files"), 30)
+
+
+    if valman ~= "1" then
+      entry({"admin", "services", "unbound", "files", "base"}, call("ShowUnboundConf"), _("UCI: Unbound"), 10).leaf = true
+    else
+      entry({"admin", "services", "unbound", "files", "base"}, cbi("unbound/manual"), _("Edit: Unbound"), 10).leaf = true
+    end
+
+
+    entry({"admin", "services", "unbound", "files", "server"}, cbi("unbound/server"), _("Edit: Server"), 20).leaf = true
+    entry({"admin", "services", "unbound", "files", "extended"}, cbi("unbound/extended"), _("Edit: Extended"), 30).leaf = true
+
+
+    if nixio.fs.access("/var/lib/unbound/unbound_dhcp.conf") then
+      entry({"admin", "services", "unbound", "files", "dhcp"}, call("ShowDHCPConf"), _("Include: DHCP"), 40).leaf = true
+    end
+
+
+    if nixio.fs.access("/var/lib/unbound/adb_list.overall") then
+      entry({"admin", "services", "unbound", "files", "adblock"}, call("ShowAdblock"), _("Include: Adblock"), 50).leaf = true
+    end
+
+  else
+    -- Simple View to UCI only
+    entry({"admin", "services", "unbound"}, cbi("unbound/configure"), _("Recursive DNS")).dependent = false
+  end
+end
+
+
+function ShowEmpty()
+  local lclhead = "Unbound Control"
+  local lcldesc = luci.i18n.translate("This could display more statistics with the unbound-control package.")
+  luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
+end
+
+
+function QuerySysLog()
+  local lclhead = "System Log"
+  local lcldata = luci.util.exec("logread | grep -i unbound")
+  local lcldesc = luci.i18n.translate("This shows syslog filtered for events involving Unbound.")
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryStatistics()
+  local lclhead = "Unbound Control Stats"
+  local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf stats_noreset")
+  local lcldesc = luci.i18n.translate("This shows some performance statistics tracked by Unbound.")
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalData()
+  local lclhead = "Unbound Control Local Data"
+  local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_data")
+  local lcldesc = luci.i18n.translate("This shows local host records that shortcut recursion.")
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function QueryLocalZone()
+  local lclhead = "Unbound Control Local Zones"
+  local lcldata = luci.util.exec("unbound-control -c /var/lib/unbound/unbound.conf list_local_zones")
+  local lcldesc = luci.i18n.translate("This shows local zone definitions that affect recursion routing or processing. ")
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowUnboundConf()
+  local unboundfile = "/var/lib/unbound/unbound.conf"
+  local lclhead = "Unbound Conf"
+  local lcldata = nixio.fs.readfile(unboundfile)
+  local lcldesc = luci.i18n.translate("This shows configuration generated by UCI:")
+  lcldesc = lcldesc .. " (" .. unboundfile .. ")"
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowDHCPConf()
+  local dhcpfile = "/var/lib/unbound/unbound_dhcp.conf"
+  local lclhead = "DHCP Conf"
+  local lcldata = nixio.fs.readfile(dhcpfile)
+  local lcldesc = luci.i18n.translate("This shows LAN hosts added by DHCP hook scripts:")
+  lcldesc = lcldesc .. " (" .. dhcpfile .. ")"
+  luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+end
+
+
+function ShowAdblock()
+  local adblockfile = "/var/lib/unbound/adb_list.overall"
+  local lclhead = "Adblock Conf"
+  local lcldata, lcldesc
+
 
-       local page
+  if nixio.fs.stat(adblockfile).size > 262144 then
+    lcldesc = luci.i18n.translate("Adblock domain list is too large for LuCI:")
+    lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+    luci.template.render("unbound/show-empty", {heading = lclhead, description = lcldesc})
 
-       page = entry({"admin", "services", "unbound"}, cbi("unbound"), _("Recursive DNS"))
-       page.dependent = true
+  else
+    lcldata = nixio.fs.readfile(adblockfile)
+    lcldesc = luci.i18n.translate("This shows blocked domains provided by Adblock scripts:")
+    lcldesc = lcldesc .. " (" .. adblockfile .. ")"
+    luci.template.render("unbound/show-textbox", {heading = lclhead, description = lcldesc, content = lcldata})
+  end
 end
 
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound.lua
deleted file mode 100644 (file)
index 847c98a..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
--- Copyright 2008 Steven Barth <steven@midlink.org>
--- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
--- Copyright 2016 Dan Luedtke <mail@danrl.com>
--- Licensed to the public under the Apache License 2.0.
-
-m = Map("unbound", translate("Recursive DNS"),
-       translate("Unbound is a validating, recursive, and caching DNS resolver."))
-
-s1 = m:section(TypedSection, "unbound")
-s1.addremove = false
-s1.anonymous = true
-s1:tab("service", translate("Basic Settings"))
-s1:tab("advanced", translate("Advanced Settings"))
-s1:tab("resource", translate("Resource Settings"))
-
---LuCI or Not
-
-ena = s1:taboption("service", Flag, "enabled", translate("Enable Unbound:"),
-  translate("Enable the initialization scripts for Unbound"))
-ena.rmempty = false
-
-mcf = s1:taboption("service", Flag, "manual_conf", translate("Manual Conf:"),
-  translate("Skip UCI and use /etc/unbound/unbound.conf"))
-mcf.rmempty = false
-
-function ena.cfgvalue(self, section)
-       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)
-end
-
---Basic Tab
-
-lsv = s1:taboption("service", Flag, "localservice", translate("Local Service:"),
-  translate("Accept queries only from local subnets"))
-lsv.rmempty = false
-
-rlh = s1:taboption("service", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
-  translate("Prevent upstream response of 127.0.0.0/8"))
-rlh.rmempty = false
-
-rpv = s1:taboption("service", Flag, "rebind_protection", translate("Block Private Rebind:"),
-  translate("Prevent upstream response of RFC1918 ranges"))
-rpv.rmempty = false
-
-vld = s1:taboption("service", Flag, "validator", translate("Enable DNSSEC:"),
-  translate("Enable the DNSSEC validator module"))
-vld.rmempty = false
-
-nvd = s1:taboption("service", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
-  translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
-nvd.rmempty = false
-nvd:depends({ validator = true })
-
-eds = s1:taboption("service", Value, "edns_size", translate("EDNS Size:"),
-  translate("Limit extended DNS packet size"))
-eds.datatype = "and(uinteger,min(512),max(4096))"
-eds.rmempty = false
-
-prt = s1:taboption("service", Value, "listen_port", translate("Listening Port:"),
-  translate("Choose Unbounds listening port"))
-prt.datatype = "port"
-prt.rmempty = false
-
-tlm = s1:taboption("service", Value, "ttl_min", translate("TTL Minimum:"),
-  translate("Prevent excessively short cache periods"))
-tlm.datatype = "and(uinteger,min(0),max(600))"
-tlm.rmempty = false
-
---Advanced Tab
-
-ctl = s1:taboption("advanced", Flag, "unbound_control", translate("Unbound Control App:"),
-  translate("Enable unecrypted localhost access for unbound-control"))
-ctl.rmempty = false
-
-dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
-  translate("Link to supported programs to load DHCP into DNS"))
-dlk:value("none", translate("No Link"))
-dlk:value("dnsmasq", "dnsmasq")
-dlk:value("odhcpd", "odhcpd")
-dlk.rmempty = false
-
-dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
-  translate("Domain suffix for this router and DHCP clients"))
-dom.placeholder = "lan"
-dom:depends({ dhcp_link = "none" })
-dom:depends({ dhcp_link = "odhcpd" })
-
-dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
-  translate("How to treat queries of this local domain"))
-dty:value("deny", translate("Ignored"))
-dty:value("refuse", translate("Refused"))
-dty:value("static", translate("Only Local"))
-dty:value("transparent", translate("Also Forwarded"))
-dty:depends({ dhcp_link = "none" })
-dty:depends({ dhcp_link = "odhcpd" })
-
-lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
-  translate("How to enter the LAN or local network router in DNS"))
-lfq:value("0", translate("No DNS"))
-lfq:value("1", translate("Hostname, Primary Address"))
-lfq:value("2", translate("Hostname, All Addresses"))
-lfq:value("3", translate("Host FQDN, All Addresses"))
-lfq:value("4", translate("Interface FQDN, All Addresses"))
-lfq:depends({ dhcp_link = "none" })
-lfq:depends({ dhcp_link = "odhcpd" })
-
-wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
-  translate("Override the WAN side router entry in DNS"))
-wfq:value("0", translate("Upstream"))
-wfq:value("1", translate("Hostname, Primary Address"))
-wfq:value("2", translate("Hostname, All Addresses"))
-wfq:value("3", translate("Host FQDN, All Addresses"))
-wfq:value("4", translate("Interface FQDN, All Addresses"))
-wfq:depends({ dhcp_link = "none" })
-wfq: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
-
-d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
-  translate("Enable the DNS64 module"))
-d64.rmempty = false
-
-pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
-  translate("Prefix for generated DNS64 addresses"))
-pfx.datatype = "ip6addr"
-pfx.placeholder = "64:ff9b::/96"
-pfx.optional = true
-pfx:depends({ dns64 = true })
-
-qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
-  translate("Break down query components for limited added privacy"))
-qry.rmempty = false
-
-qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
-  translate("Strict version of 'query minimize' but it can break DNS"))
-qrs.rmempty = false
-qrs:depends({ query_minimize = true })
-
---TODO: dnsmasq needs to not reference resolve-file and get off port 53.
-
---Resource Tuning Tab
-
-pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
-  translate("Chose the protocol recursion queries leave on"))
-pro:value("mixed", translate("IP4 and IP6"))
-pro:value("ip6_prefer", translate("IP6 Preferred"))
-pro:value("ip4_only", translate("IP4 Only"))
-pro:value("ip6_only", translate("IP6 Only"))
-pro.rmempty = false
-
-rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
-  translate("Recursion activity affects memory growth and CPU load"))
-rsn:value("aggressive", translate("Aggressive"))
-rsn:value("default", translate("Default"))
-rsn:value("passive", translate("Passive"))
-rsn.rmempty = false
-
-rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
-  translate("Use menu System/Processes to observe any memory growth"))
-rsc:value("large", translate("Large"))
-rsc:value("medium", translate("Medium"))
-rsc:value("small", translate("Small"))
-rsc:value("tiny", translate("Tiny"))
-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("99", "99 ("..translate("never")..")")
-
-return m
-
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/configure.lua
new file mode 100644 (file)
index 0000000..cdf7757
--- /dev/null
@@ -0,0 +1,273 @@
+-- Copyright 2008 Steven Barth <steven@midlink.org>
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Copyright 2016 Dan Luedtke <mail@danrl.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m1, s1
+local ena, mcf, lci, lsv, rlh, rpv, vld, nvd, eds, prt, tlm
+local ctl, dlk, dom, dty, lfq, wfq, exa, dp6, d64, pfx, qry, qrs
+local pro, tgr, rsc, rsn, ag2, stt
+local ucl = luci.model.uci.cursor()
+local valman = ucl:get_first("unbound", "unbound", "manual_conf")
+
+m1 = Map("unbound")
+
+s1 = m1:section(TypedSection, "unbound")
+s1.addremove = false
+s1.anonymous = true
+
+--LuCI, Unbound, or Not
+s1:tab("basic", translate("Basic"),
+  translatef("<h3>Unbound Basic Settings</h3>\n"
+  .. "<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"))
+
+ena = s1:taboption("basic", Flag, "enabled", translate("Enable Unbound:"),
+  translate("Enable the initialization scripts for Unbound"))
+ena.rmempty = false
+
+mcf = s1:taboption("basic", Flag, "manual_conf", translate("Manual Conf:"),
+  translate("Skip UCI and use /etc/unbound/unbound.conf"))
+mcf.rmempty = false
+
+lci = s1:taboption("basic", Flag, "extended_luci", translate("Advanced LuCI:"),
+  translate("See detailed tabs for debug and advanced manual configuration"))
+lci.rmempty = false
+
+
+function ena.cfgvalue(self, section)
+  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)
+end
+
+
+if valman ~= "1" then
+  -- Not in manual configuration mode; show UCI
+  s1:tab("advanced", translate("Advanced"),
+    translatef("<h3>Unbound Advanced Settings</h3>\n"
+    .. "Advanced setttings and plugin modules for "
+    .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+    .. " DNS resolver.", "https://www.unbound.net/"))
+
+  s1:tab("resource", translate("Resource"),
+    translatef("<h3>Unbound Resource Settings</h3>\n"
+    .. "Memory and protocol setttings for "
+    .. "<a href=\"%s\" target=\"_blank\">Unbound</a>"
+    .. " DNS resolver.", "https://www.unbound.net/"))
+
+  --Basic Tab
+  lsv = s1:taboption("basic", Flag, "localservice", translate("Local Service:"),
+    translate("Accept queries only from local subnets"))
+  lsv.rmempty = false
+
+  rlh = s1:taboption("basic", Flag, "rebind_localhost", translate("Block Localhost Rebind:"),
+    translate("Prevent upstream response of 127.0.0.0/8"))
+  rlh.rmempty = false
+
+  rpv = s1:taboption("basic", Flag, "rebind_protection", translate("Block Private Rebind:"),
+    translate("Prevent upstream response of RFC1918 ranges"))
+  rpv.rmempty = false
+
+  vld = s1:taboption("basic", Flag, "validator", translate("Enable DNSSEC:"),
+    translate("Enable the DNSSEC validator module"))
+  vld.rmempty = false
+
+  nvd = s1:taboption("basic", Flag, "validator_ntp", translate("DNSSEC NTP Fix:"),
+    translate("Break the loop where DNSSEC needs NTP and NTP needs DNS"))
+  nvd.rmempty = false
+  nvd:depends({ validator = true })
+
+  eds = s1:taboption("basic", Value, "edns_size", translate("EDNS Size:"),
+    translate("Limit extended DNS packet size"))
+  eds.datatype = "and(uinteger,min(512),max(4096))"
+  eds.rmempty = false
+
+  prt = s1:taboption("basic", Value, "listen_port", translate("Listening Port:"),
+    translate("Choose Unbounds listening port"))
+  prt.datatype = "port"
+  prt.rmempty = false
+
+  tlm = s1:taboption("basic", Value, "ttl_min", translate("TTL Minimum:"),
+    translate("Prevent excessively short cache periods"))
+  tlm.datatype = "and(uinteger,min(0),max(600))"
+  tlm.rmempty = false
+
+  --Advanced Tab
+  ctl = s1:taboption("advanced", ListValue, "unbound_control", translate("Unbound Control App:"),
+    translate("Enable access for unbound-control"))
+  ctl.rmempty = false
+  ctl:value("0", translate("No Remote Control"))
+  ctl:value("1", translate("Local Host, No Encryption"))
+  ctl:value("2", translate("Local Host, Encrypted"))
+  ctl:value("3", translate("Local Subnet, Encrypted"))
+  ctl:value("4", translate("Local Subnet, Static Encryption"))
+
+  dlk = s1:taboption("advanced", ListValue, "dhcp_link", translate("DHCP Link:"),
+    translate("Link to supported programs to load DHCP into DNS"))
+  dlk:value("none", translate("No Link"))
+  dlk:value("dnsmasq", "dnsmasq")
+  dlk:value("odhcpd", "odhcpd")
+  dlk.rmempty = false
+
+  dom = s1:taboption("advanced", Value, "domain", translate("Local Domain:"),
+    translate("Domain suffix for this router and DHCP clients"))
+  dom.placeholder = "lan"
+  dom:depends({ dhcp_link = "none" })
+  dom:depends({ dhcp_link = "odhcpd" })
+
+  dty = s1:taboption("advanced", ListValue, "domain_type", translate("Local Domain Type:"),
+    translate("How to treat queries of this local domain"))
+  dty:value("deny", translate("Ignored"))
+  dty:value("refuse", translate("Refused"))
+  dty:value("static", translate("Only Local"))
+  dty:value("transparent", translate("Also Forwarded"))
+  dty:depends({ dhcp_link = "none" })
+  dty:depends({ dhcp_link = "odhcpd" })
+
+  lfq = s1:taboption("advanced", ListValue, "add_local_fqdn", translate("LAN DNS:"),
+    translate("How to enter the LAN or local network router in DNS"))
+  lfq:value("0", translate("No DNS"))
+  lfq:value("1", translate("Hostname, Primary Address"))
+  lfq:value("2", translate("Hostname, All Addresses"))
+  lfq:value("3", translate("Host FQDN, All Addresses"))
+  lfq:value("4", translate("Interface FQDN, All Addresses"))
+  lfq:depends({ dhcp_link = "none" })
+  lfq:depends({ dhcp_link = "odhcpd" })
+
+  wfq = s1:taboption("advanced", ListValue, "add_wan_fqdn", translate("WAN DNS:"),
+    translate("Override the WAN side router entry in DNS"))
+  wfq:value("0", translate("Upstream"))
+  wfq:value("1", translate("Hostname, Primary Address"))
+  wfq:value("2", translate("Hostname, All Addresses"))
+  wfq:value("3", translate("Host FQDN, All Addresses"))
+  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" })
+
+  dp6 = s1:taboption("advanced", Flag, "dhcp4_slaac6", translate("DHCPv4 to SLAAC:"),
+    translate("Use DHCPv4 MAC to discover IP6 hosts SLAAC (EUI64)"))
+  dp6.rmempty = false
+
+  d64 = s1:taboption("advanced", Flag, "dns64", translate("Enable DNS64:"),
+    translate("Enable the DNS64 module"))
+  d64.rmempty = false
+
+  pfx = s1:taboption("advanced", Value, "dns64_prefix", translate("DNS64 Prefix:"),
+    translate("Prefix for generated DNS64 addresses"))
+  pfx.datatype = "ip6addr"
+  pfx.placeholder = "64:ff9b::/96"
+  pfx.optional = true
+  pfx:depends({ dns64 = true })
+
+  qry = s1:taboption("advanced", Flag, "query_minimize", translate("Query Minimize:"),
+    translate("Break down query components for limited added privacy"))
+  qry.rmempty = false
+
+  qrs = s1:taboption("advanced", Flag, "query_min_strict", translate("Strict Minimize:"),
+    translate("Strict version of 'query minimize' but it can break DNS"))
+  qrs.rmempty = false
+  qrs:depends({ query_minimize = true })
+
+  --TODO: dnsmasq needs to not reference resolve-file and get off port 53.
+
+  --Resource Tuning Tab
+  pro = s1:taboption("resource", ListValue, "protocol", translate("Recursion Protocol:"),
+    translate("Chose the protocol recursion queries leave on"))
+  pro:value("mixed", translate("IP4 and IP6"))
+  pro:value("ip6_prefer", translate("IP6 Preferred"))
+  pro:value("ip4_only", translate("IP4 Only"))
+  pro:value("ip6_only", translate("IP6 Only"))
+  pro.rmempty = false
+
+  rsn = s1:taboption("resource", ListValue, "recursion", translate("Recursion Strength:"),
+    translate("Recursion activity affects memory growth and CPU load"))
+  rsn:value("aggressive", translate("Aggressive"))
+  rsn:value("default", translate("Default"))
+  rsn:value("passive", translate("Passive"))
+  rsn.rmempty = false
+
+  rsc = s1:taboption("resource", ListValue, "resource", translate("Memory Resource:"),
+    translate("Use menu System/Processes to observe any memory growth"))
+  rsc:value("large", translate("Large"))
+  rsc:value("medium", translate("Medium"))
+  rsc:value("small", translate("Small"))
+  rsc:value("tiny", translate("Tiny"))
+  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("3", "3")
+  ag2:value("9", "9 ("..translate("default")..")")
+  ag2:value("12", "12")
+  ag2:value("24", "24")
+  ag2:value("99", "99 ("..translate("never")..")")
+
+  stt = s1:taboption("resource", Flag, "extended_stats", translate("Extended Statistics:"),
+    translate("Extended statistics are printed from unbound-control"))
+  stt.rmempty = false
+
+  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"
+
+else
+  s1:tab("rfc5011", translate("RFC5011"),
+    translatef("<h3>Unbound RFC5011 Settings</h3>\n"
+    .. "RFC5011 copy scripts protect flash ROM even with UCI disabled."))
+
+  ag2 = s1:taboption("rfc5011", Value, "root_age", translate("Root DSKEY Age:"),
+    translate("Limit days to copy /var/->/etc/ to reduce flash writes"))
+  ag2.datatype = "and(uinteger,min(1),max(99))"
+  ag2:value("3", "3")
+  ag2:value("9", "9 ("..translate("default")..")")
+  ag2:value("12", "12")
+  ag2:value("24", "24")
+  ag2:value("99", "99 ("..translate("never")..")")
+end
+
+
+function m1.on_after_commit(self)
+  function ena.validate(self, value)
+    if value ~= "0" then
+      luci.sys.call("/etc/init.d/unbound restart >/dev/null 2>&1")
+    else
+      luci.sys.call("/etc/init.d/unbound stop >/dev/null 2>&1")
+    end
+  end
+
+
+  -- Restart Unbound with configuration and reload the page (some options hide)
+  luci.http.redirect(luci.dispatcher.build_url("admin", "services", "unbound"))
+end
+
+
+return m1
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/extended.lua
new file mode 100644 (file)
index 0000000..67d2ec6
--- /dev/null
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m4, s4, frm
+local filename = "/etc/unbound/unbound_ext.conf"
+local description =  translatef("Here you may edit 'forward:' and 'remote-control:' in an extended 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m4 = SimpleForm("editing", nil)
+m4:append(Template("unbound/css-editing"))
+m4.submit = translate("Save")
+m4.reset = false
+s4 = m4:section(SimpleSection, "Unbound Extended Conf", description)
+frm = s4:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+  return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m4
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/manual.lua
new file mode 100644 (file)
index 0000000..5cfb9c3
--- /dev/null
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m2, s2, frm
+local filename = "/etc/unbound/unbound.conf"
+local description =  translatef("Here you may edit raw 'unbound.conf' when you don't use UCI:")
+description = description .. " (" .. filename .. ")"
+
+m2 = SimpleForm("editing", nil)
+m2:append(Template("unbound/css-editing"))
+m2.submit = translate("Save")
+m2.reset = false
+s2 = m2:section(SimpleSection, "Unbound Conf", description)
+frm = s2:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+  return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m2
+
diff --git a/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua b/applications/luci-app-unbound/luasrc/model/cbi/unbound/server.lua
new file mode 100644 (file)
index 0000000..d0ac407
--- /dev/null
@@ -0,0 +1,30 @@
+-- Copyright 2016 Eric Luehrsen <ericluehrsen@hotmail.com>
+-- Licensed to the public under the Apache License 2.0.
+
+local m3, s3, frm
+local filename = "/etc/unbound/unbound_srv.conf"
+local description =  translatef("Here you may edit the 'server:' clause in an internal 'include:'")
+description = description .. " (" .. filename .. ")"
+
+m3 = SimpleForm("editing", nil)
+m3:append(Template("unbound/css-editing"))
+m3.submit = translate("Save")
+m3.reset = false
+s3 = m3:section(SimpleSection, "Unbound Server Conf", description)
+frm = s3:option(TextValue, "data")
+frm.datatype = "string"
+frm.rows = 20
+
+
+function frm.cfgvalue()
+  return nixio.fs.readfile(filename) or ""
+end
+
+
+function frm.write(self, section, data)
+  return nixio.fs.writefile(filename, luci.util.trim(data:gsub("\r\n", "\n")))
+end
+
+
+return m3
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm b/applications/luci-app-unbound/luasrc/view/unbound/css-editing.htm
new file mode 100644 (file)
index 0000000..44d0937
--- /dev/null
@@ -0,0 +1,8 @@
+<style type="text/css">
+  textarea
+  {
+    background-color: #fffff0;
+    font-family: monospace;
+  }
+</style>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-empty.htm
new file mode 100644 (file)
index 0000000..87d6cc6
--- /dev/null
@@ -0,0 +1,5 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm b/applications/luci-app-unbound/luasrc/view/unbound/show-textbox.htm
new file mode 100644 (file)
index 0000000..c0a7d13
--- /dev/null
@@ -0,0 +1,8 @@
+<%+header%>
+<h3><%=heading:pcdata()%></h3>
+<p><%=description:pcdata()%></p>
+<div>
+<textarea style="width: 100%; height: 480px; font-family: monospace;" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+2%>"><%=content:pcdata()%></textarea>
+</div>
+<%+footer%>
+
diff --git a/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound b/applications/luci-app-unbound/root/etc/uci-defaults/60_luci-unbound
new file mode 100644 (file)
index 0000000..c2ac8c9
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+  delete ucitrack.@unbound[-1]
+  add ucitrack unbound
+  set ucitrack.@unbound[-1].init=unbound
+  commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
+
index f1bb450..74b9d1d 100644 (file)
@@ -12,21 +12,21 @@ s.addremove = false
 s:tab("general",  translate("General Settings"))
 s:tab("advanced", translate("Advanced Settings"))
 
-e = s:taboption("general", Flag, "_init", translate("Start UPnP and NAT-PMP service"))
+e = s:taboption("general", Flag, "enabled", translate("Start UPnP and NAT-PMP service"))
 e.rmempty  = false
 
-function e.cfgvalue(self, section)
-       return luci.sys.init.enabled("miniupnpd") and self.enabled or self.disabled
-end
+--function e.cfgvalue(self, section)
+--     return luci.sys.init.enabled("miniupnpd") and self.enabled or self.disabled
+--end
 
 function e.write(self, section, value)
        if value == "1" then
-               luci.sys.call("/etc/init.d/miniupnpd enable >/dev/null")
                luci.sys.call("/etc/init.d/miniupnpd start >/dev/null")
        else
                luci.sys.call("/etc/init.d/miniupnpd stop >/dev/null")
-               luci.sys.call("/etc/init.d/miniupnpd disable >/dev/null")
        end
+
+       return Flag.write(self, section, value)
 end
 
 s:taboption("general", Flag, "enable_upnp", translate("Enable UPnP functionality")).default = "1"
index 693bbc1..022e16e 100644 (file)
@@ -82,7 +82,7 @@ msgid "External ports"
 msgstr "外部端口"
 
 msgid "General Settings"
-msgstr "ä¸\80è\88¬è®¾ç½®"
+msgstr "å\9fºæ\9c¬è®¾ç½®"
 
 msgid "Internal addresses"
 msgstr "内部地址"
diff --git a/applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp b/applications/luci-app-upnp/root/etc/uci-defaults/40_luci-miniupnp
new file mode 100755 (executable)
index 0000000..e9636f9
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@upnpd[-1]
+       add ucitrack upnpd
+       set ucitrack.@upnpd[-1].init=miniupnpd
+       commit ucitrack
+EOF
+
+rm -f /tmp/luci-indexcache
+exit 0
index 5207a8b..7926f79 100644 (file)
@@ -17,9 +17,9 @@ msgstr "診斷"
 msgid ""
 "The diagnostics available on your device depend on the modules that you have "
 "installed."
-msgstr "能否診斷你的設備端看你已安裝的模組"
+msgstr "能否診斷您的設備端看您已安裝的模組"
 
 msgid ""
 "Under this menu are options that allow you to configure and perform tests on "
 "the voice operations of your system. These are known as diagnostics."
-msgstr "選單下有選項讓你能夠設定並執行測試你系統上的語音操作. 這些都是已知的診斷方法"
+msgstr "選單下有選項讓您能夠設定並執行測試您系統上的語音操作. 這些都是已知的診斷方法"
index 58b3d30..0ca74ae 100644 (file)
@@ -3,42 +3,14 @@
 
 include $(TOPDIR)/rules.mk
 
-PKG_NAME:=luci-app-vpnbypass
-PKG_VERSION:=1.0.0
-PKG_RELEASE:=3
 PKG_LICENSE:=GPL-3.0+
 PKG_MAINTAINER:=Stan Grishin <stangri@melmac.net>
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
-include $(INCLUDE_DIR)/package.mk
+LUCI_TITLE:=VPN Bypass Web UI
+LUCI_DEPENDS:=+vpnbypass
+LUCI_PKGARCH:=all
+PKG_RELEASE:=1
 
-define Package/luci-app-vpnbypass
-  SECTION:=luci
-  CATEGORY:=LuCI
-  SUBMENU:=3. Applications
-  TITLE:=VPN Bypass Web UI
-  DEPENDS:=+luci-mod-admin-full +vpnbypass
-  PKGARCH:=all
-endef
+include ../../luci.mk
 
-define Package/luci-app-vpnbypass/description
- This package will install VPN Bypass Web UI.
-endef
-
-define Build/Prepare
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/luci-app-vpnbypass/install
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci/controller/
-       $(INSTALL_BIN) ./luasrc/controller/vpnbypass.lua  $(1)/usr/lib/lua/luci/controller/vpnbypass.lua
-       $(INSTALL_DIR) $(1)/usr/lib/lua/luci/model/cbi/
-       $(INSTALL_BIN) ./luasrc/model/cbi/vpnbypass.lua $(1)/usr/lib/lua/luci/model/cbi/vpnbypass.lua
-endef
-
-$(eval $(call BuildPackage,luci-app-vpnbypass))
\ No newline at end of file
+# call BuildPackage - OpenWrt buildroot signature
index 6becd67..ed6f4f4 100644 (file)
@@ -3,6 +3,5 @@ function index()
        if not nixio.fs.access("/etc/config/vpnbypass") then
                return
        end
-       entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), translate("VPN Bypass"), 1)
+       entry({"admin", "services", "vpnbypass"}, cbi("vpnbypass"), _("VPN Bypass"))
 end
-
index 1957948..b35a8e4 100644 (file)
@@ -1,35 +1,61 @@
-m = Map("vpnbypass", translate("VPN Bypass Settings"), translate("Configuration of VPN Bypass Settings"))
+readmeURL = "https://github.com/openwrt/packages/blob/master/net/vpnbypass/files/README.md"
+
+m = Map("vpnbypass", translate("VPN Bypass Settings"))
 s = m:section(NamedSection, "config", "vpnbypass")
 
 -- General options
-o1 = s:option(Flag, "enabled", translate("Enable VPN Bypass"))
-o1.rmempty = false
-o1.default = 0
+e = s:option(Flag, "enabled", translate("Enable/start service"))
+e.rmempty = false
+
+function e.cfgvalue(self, section)
+       return self.map:get(section, "enabled") == "1" and luci.sys.init.enabled("vpnbypass") and self.enabled or self.disabled
+end
+
+function e.write(self, section, value)
+       if value == "1" then
+               luci.sys.call("/etc/init.d/vpnbypass enable >/dev/null")
+               luci.sys.call("/etc/init.d/vpnbypass start >/dev/null")
+       else
+               luci.sys.call("/etc/init.d/vpnbypass stop >/dev/null")
+       end
+       return Flag.write(self, section, value)
+end
 
 -- Local Ports
 p1 = s:option(DynamicList, "localport", translate("Local Ports to Bypass"), translate("Local ports to trigger VPN Bypass"))
-p1.addremove = true
-p1.optional = true
+p1.datatype    = "portrange"
+-- p1.placeholder = "0-65535"
+p1.addremove = false
+p1.optional = false
 
 -- Remote Ports
 p2 = s:option(DynamicList, "remoteport", translate("Remote Ports to Bypass"), translate("Remote ports to trigger VPN Bypass"))
-p2.addremove = true
-p2.optional = true
+p2.datatype    = "portrange"
+-- p2.placeholder = "0-65535"
+p2.addremove = false
+p2.optional = false
 
 -- Local Subnets
-r1 = s:option(DynamicList, "localsubnet", translate("Local IP Subnets to Bypass"), translate("Local IP ranges with direct internet access (outside of the VPN tunnel)"))
-r1.addremove = true
-r1.optional = true
+r1 = s:option(DynamicList, "localsubnet", translate("Local IP Addresses to Bypass"), translate("Local IP addresses or subnets with direct internet access (outside of the VPN tunnel)"))
+r1.datatype    = "ip4addr"
+-- r1.placeholder = luci.ip.new(uci.cursor():get("network", "lan", "ipaddr") .. "/" .. uci.cursor():get("network", "lan", "netmask"))
+r1.addremove = false
+r1.optional = false
 
 -- Remote Subnets
-r2 = s:option(DynamicList, "remotesubnet", translate("Remote IP Subnets to Bypass"), translate("Remote IP ranges which will be accessed directly (outside of the VPN tunnel)"))
-r2.addremove = true
-r2.optional = true
+r2 = s:option(DynamicList, "remotesubnet", translate("Remote IP Addresses to Bypass"), translate("Remote IP addresses or subnets which will be accessed directly (outside of the VPN tunnel)"))
+r2.datatype    = "ip4addr"
+-- r2.placeholder = "0.0.0.0/0"
+r2.addremove = false
+r2.optional = false
 
 -- Domains
-d1 = s:option(DynamicList, "domain", translate("Domains to Bypass"), translate("Domains which will be accessed directly (outside of the VPN tunnel)"))
-d1.addremove = true
-d1.optional = true
-
-return m
-
+d = Map("dhcp")
+s4 = d:section(TypedSection, "dnsmasq")
+s4.anonymous = true
+di = s4:option(DynamicList, "ipset", translate("Domains to Bypass"),
+    translate("Domains to be accessed directly (outside of the VPN tunnel), see ")
+               .. [[<a href="]] .. readmeURL .. [[#bypass-domains-formatsyntax" target="_blank">]]
+    .. translate("README") .. [[</a>]] .. translate(" for syntax"))
+
+return m, d
diff --git a/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po b/applications/luci-app-vpnbypass/po/pt-br/vpnbypass.po
new file mode 100644 (file)
index 0000000..9f3fa2a
--- /dev/null
@@ -0,0 +1,90 @@
+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 "Domains to Bypass"
+msgstr "Domínios para evitar a VPN"
+
+msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
+msgstr ""
+
+msgid "Enable/start service"
+msgstr ""
+
+msgid "Local IP Addresses to Bypass"
+msgstr ""
+
+msgid ""
+"Local IP addresses or subnets with direct internet access (outside of the "
+"VPN tunnel)"
+msgstr ""
+
+msgid "Local Ports to Bypass"
+msgstr "Portas locais para evitar a VPN"
+
+msgid "Local ports to trigger VPN Bypass"
+msgstr "Portas locais para disparar o VPN Bypass"
+
+msgid "README"
+msgstr ""
+
+msgid "Remote IP Addresses to Bypass"
+msgstr ""
+
+msgid ""
+"Remote IP addresses or subnets which will be accessed directly (outside of "
+"the VPN tunnel)"
+msgstr ""
+
+msgid "Remote Ports to Bypass"
+msgstr "Portas remotas para evitar a VPN"
+
+msgid "Remote ports to trigger VPN Bypass"
+msgstr "Portas remotas para disparar o VPN Bypass"
+
+msgid "VPN Bypass"
+msgstr "VPN Bypass"
+
+msgid "VPN Bypass Settings"
+msgstr "Configurações do VPN Bypass"
+
+msgid "for syntax"
+msgstr ""
+
+#~ msgid "Enable VPN Bypass"
+#~ msgstr "Habilitar o VPN Bypass"
+
+#~ msgid "Configuration of VPN Bypass Settings"
+#~ msgstr "Configurações do VPN Bypass"
+
+#~ msgid "Domains which will be accessed directly (outside of the VPN tunnel)"
+#~ msgstr "Domínios que serão acessados diretamente (fora do túnel VPN)"
+
+#~ msgid "Local IP Subnets to Bypass"
+#~ msgstr "Subredes IP locais para evitar a VPN"
+
+#~ msgid ""
+#~ "Local IP ranges with direct internet access (outside of the VPN tunnel)"
+#~ msgstr ""
+#~ "Faixa de endereços IP locais que terão acesso internet direto (fora do "
+#~ "túnel VPN)"
+
+#~ msgid "Remote IP Subnets to Bypass"
+#~ msgstr "Subredes IP remotas para evitar a VPN"
+
+#~ msgid ""
+#~ "Remote IP ranges which will be accessed directly (outside of the VPN "
+#~ "tunnel)"
+#~ msgstr ""
+#~ "Faixa de endereços IP remotos que serão acessados diretamente (fora do "
+#~ "túnel VPN)"
diff --git a/applications/luci-app-vpnbypass/po/templates/vpnbypass.pot b/applications/luci-app-vpnbypass/po/templates/vpnbypass.pot
new file mode 100644 (file)
index 0000000..fd92b5e
--- /dev/null
@@ -0,0 +1,51 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Domains to Bypass"
+msgstr ""
+
+msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
+msgstr ""
+
+msgid "Enable/start service"
+msgstr ""
+
+msgid "Local IP Addresses to Bypass"
+msgstr ""
+
+msgid ""
+"Local IP addresses or subnets with direct internet access (outside of the "
+"VPN tunnel)"
+msgstr ""
+
+msgid "Local Ports to Bypass"
+msgstr ""
+
+msgid "Local ports to trigger VPN Bypass"
+msgstr ""
+
+msgid "README"
+msgstr ""
+
+msgid "Remote IP Addresses to Bypass"
+msgstr ""
+
+msgid ""
+"Remote IP addresses or subnets which will be accessed directly (outside of "
+"the VPN tunnel)"
+msgstr ""
+
+msgid "Remote Ports to Bypass"
+msgstr ""
+
+msgid "Remote ports to trigger VPN Bypass"
+msgstr ""
+
+msgid "VPN Bypass"
+msgstr ""
+
+msgid "VPN Bypass Settings"
+msgstr ""
+
+msgid "for syntax"
+msgstr ""
diff --git a/applications/luci-app-vpnbypass/po/zh-cn/vpnbypass.po b/applications/luci-app-vpnbypass/po/zh-cn/vpnbypass.po
new file mode 100644 (file)
index 0000000..a153917
--- /dev/null
@@ -0,0 +1,61 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-29 15:30+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+msgid "Domains to Bypass"
+msgstr "要绕过的域"
+
+msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
+msgstr "要直接访问的域(不使用 VPN 隧道),请参见"
+
+msgid "Enable/start service"
+msgstr "启用/启动服务"
+
+msgid "Local IP Addresses to Bypass"
+msgstr "要绕过的本地 IP 地址"
+
+msgid ""
+"Local IP addresses or subnets with direct internet access (outside of the "
+"VPN tunnel)"
+msgstr "直接访问的本地 IP 地址或子网(不使用 VPN 隧道)"
+
+msgid "Local Ports to Bypass"
+msgstr "要绕过的本地端口"
+
+msgid "Local ports to trigger VPN Bypass"
+msgstr "触发 VPN 绕过的本地端口"
+
+msgid "README"
+msgstr "README"
+
+msgid "Remote IP Addresses to Bypass"
+msgstr "要绕过的远程 IP 地址"
+
+msgid ""
+"Remote IP addresses or subnets which will be accessed directly (outside of "
+"the VPN tunnel)"
+msgstr "将直接访问的远程 IP 地址或子网(不使用 VPN 隧道)"
+
+msgid "Remote Ports to Bypass"
+msgstr "要绕过的远程端口"
+
+msgid "Remote ports to trigger VPN Bypass"
+msgstr "触发 VPN 绕过的远程端口"
+
+msgid "VPN Bypass"
+msgstr "VPN 绕过"
+
+msgid "VPN Bypass Settings"
+msgstr "VPN 绕过设置"
+
+msgid "for syntax"
+msgstr "对于语法"
diff --git a/applications/luci-app-vpnbypass/po/zh-tw/vpnbypass.po b/applications/luci-app-vpnbypass/po/zh-tw/vpnbypass.po
new file mode 100644 (file)
index 0000000..90ba85f
--- /dev/null
@@ -0,0 +1,61 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"PO-Revision-Date: 2017-10-29 15:30+0800\n"
+"X-Generator: Gtranslator 2.91.7\n"
+
+msgid "Domains to Bypass"
+msgstr "要繞過的域"
+
+msgid "Domains to be accessed directly (outside of the VPN tunnel), see"
+msgstr "要直接訪問的域(不使用 VPN 隧道),請參見"
+
+msgid "Enable/start service"
+msgstr "啟用/啟動服務"
+
+msgid "Local IP Addresses to Bypass"
+msgstr "要繞過的本地 IP 位址"
+
+msgid ""
+"Local IP addresses or subnets with direct internet access (outside of the "
+"VPN tunnel)"
+msgstr "直接訪問的本地 IP 位址或子網(不使用 VPN 隧道)"
+
+msgid "Local Ports to Bypass"
+msgstr "要繞過的本地埠"
+
+msgid "Local ports to trigger VPN Bypass"
+msgstr "觸發 VPN 繞過的本地埠"
+
+msgid "README"
+msgstr "README"
+
+msgid "Remote IP Addresses to Bypass"
+msgstr "要繞過的遠端 IP 位址"
+
+msgid ""
+"Remote IP addresses or subnets which will be accessed directly (outside of "
+"the VPN tunnel)"
+msgstr "將直接訪問的遠端 IP 位址或子網(不使用 VPN 隧道)"
+
+msgid "Remote Ports to Bypass"
+msgstr "要繞過的遠端埠"
+
+msgid "Remote ports to trigger VPN Bypass"
+msgstr "觸發 VPN 繞過的遠端埠"
+
+msgid "VPN Bypass"
+msgstr "VPN 繞過"
+
+msgid "VPN Bypass Settings"
+msgstr "VPN 繞過設定"
+
+msgid "for syntax"
+msgstr "對於語法"
index fe97036..e37066c 100644 (file)
@@ -1,15 +1,16 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-03-29 23:20+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2017-02-20 18:10-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"POT-Creation-Date: \n"
 
 msgid "Forced reboot delay"
 msgstr "Atraso para reinício forçado"
@@ -51,15 +52,13 @@ msgstr "Período de ping"
 msgid "Watchcat"
 msgstr "Watchcat"
 
-#, fuzzy
 msgid ""
 "Watchcat allows configuring a periodic reboot when the Internet connection "
 "has been lost for a certain period of time."
 msgstr ""
-"Watchcat permite que se configure um período para reiniciar e/ou quando a "
+"Watchcat permite a configuração de um período para reiniciar e/ou quando a "
 "conexão com à Internet foi perdida por um ser período de tempo."
 
-#, fuzzy
 msgid ""
 "When rebooting the system, the watchcat will trigger a soft reboot. Entering "
 "a non zero value here will trigger a delayed hard reboot if the soft reboot "
index 0b811bc..96c73e3 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"
index 991fc48..fc9f7d6 100644 (file)
@@ -21,7 +21,7 @@ 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 ""
-"检测网络连接的频率。默认单位为秒,可以使用'm'作为后缀表示分钟,‘h’表示小"
+"检测网络连接的频率。默认单位为秒,可以使用'm'作为后缀表示分钟,‘h’表示小"
 "时‘d’表示天。"
 
 msgid ""
@@ -31,7 +31,7 @@ msgid ""
 "for hours or 'd' for days"
 msgstr ""
 "在周期模式,此处定义了重启的周期。在联网模式,这个表示没有网络连接情况下到执"
-"行重启的最长时间间隔。默认单位为秒,可以使用'm'作为后缀表示分钟,‘h’表示小"
+"行重启的最长时间间隔。默认单位为秒,可以使用'm'作为后缀表示分钟,‘h’表示小"
 "时‘d’表示天。"
 
 msgid "Operating mode"
diff --git a/applications/luci-app-wifischedule/po/it/wifischedule.po b/applications/luci-app-wifischedule/po/it/wifischedule.po
new file mode 100644 (file)
index 0000000..18a9dce
--- /dev/null
@@ -0,0 +1,101 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Activate wifi"
+msgstr "Attiva wifi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Impossibile trovare /usr/bin/wifi_schedule.sh o /sbin/wifi"
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr "Impossibile trovare il programma /usr/bin/iwinfo"
+
+msgid "Cron Jobs"
+msgstr "Operazioni Programmate"
+
+msgid "Day(s) of Week"
+msgstr "Giorno(i) della Settimana"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definisce un piano di accensione o spegnimento del wifi"
+
+msgid "Determine Modules Automatically"
+msgstr "Determina i Moduli Automaticamente"
+
+msgid "Disable wifi gracefully"
+msgstr "Disabilita wifi con grazia"
+
+msgid "Disabled wifi forced"
+msgstr "Disabilita wifi con forza"
+
+msgid "Enable"
+msgstr "Abilita"
+
+msgid "Enable Wifi Schedule"
+msgstr "Abilita il Piano Wifi"
+
+msgid "Enable logging"
+msgstr "Abilita il registro"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forza disattivazione wifi anche con stazioni associate"
+
+msgid "Friday"
+msgstr "Venerdì"
+
+msgid "Global Settings"
+msgstr "Impostazioni Globali"
+
+msgid "Monday"
+msgstr "Lunedì"
+
+msgid "Saturday"
+msgstr "Sabato"
+
+msgid "Schedule"
+msgstr "Piano"
+
+msgid "Schedule events"
+msgstr "Piano eventi"
+
+msgid "Start Time"
+msgstr "Orario di Inizio"
+
+msgid "Start WiFi"
+msgstr ""
+
+msgid "Stop Time"
+msgstr "Orario di Stop"
+
+msgid "Stop WiFi"
+msgstr ""
+
+msgid "Sunday"
+msgstr "Domenica"
+
+msgid "The value %s is invalid"
+msgstr "Il valore %s è invalido"
+
+msgid "Thursday"
+msgstr "Giovedì"
+
+msgid "Tuesday"
+msgstr "Martedì"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Scarica Moduli (sperimentale; risparmia più energia)"
+
+msgid "View Cron Jobs"
+msgstr "Vedi Operazioni Programmate"
+
+msgid "View Logfile"
+msgstr "Vedi il Registro"
+
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+msgid "Wifi Schedule"
+msgstr "Piano Wifi"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Registro Piano Wifi"
diff --git a/applications/luci-app-wifischedule/po/pt-br/wifischedule.po b/applications/luci-app-wifischedule/po/pt-br/wifischedule.po
new file mode 100644 (file)
index 0000000..19e31b5
--- /dev/null
@@ -0,0 +1,114 @@
+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 "Activate wifi"
+msgstr "Ativar a WiFi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Não foi possível localizar os programas necessários '/usr/bin/wifi_schedule."
+"sh' ou '/sbin/wifi'."
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr "Não foi possível localizar o programa necessário '/usr/bin/iwinfo'"
+
+msgid "Cron Jobs"
+msgstr "Tarefas da Cron"
+
+msgid "Day(s) of Week"
+msgstr "Dia(s) da semana"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Define um agendamento para quando ligar ou desligar a WiFi."
+
+msgid "Determine Modules Automatically"
+msgstr "Determinar os Módulos Automaticamente"
+
+msgid "Disable wifi gracefully"
+msgstr "Desabilitar a WiFi amistosamente"
+
+msgid "Disabled wifi forced"
+msgstr "WiFi foi desabilitada de forma forçada."
+
+msgid "Enable"
+msgstr "Habilitar"
+
+msgid "Enable Wifi Schedule"
+msgstr "Habilitar o agendamento da WiFi"
+
+msgid "Enable logging"
+msgstr "Habilite os registros (log)"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr "Force a desativação da WiFi mesmo se existirem estações associadas "
+
+msgid "Friday"
+msgstr "Sexta-feira"
+
+msgid "Global Settings"
+msgstr "Configurações Globais"
+
+msgid "Monday"
+msgstr "Segunda-Feira"
+
+msgid "Saturday"
+msgstr "Sábado"
+
+msgid "Schedule"
+msgstr "Agendamento"
+
+msgid "Schedule events"
+msgstr "Eventos do agendamento"
+
+msgid "Start Time"
+msgstr "Hora Inicial"
+
+msgid "Start WiFi"
+msgstr "Iniciar WiFi"
+
+msgid "Stop Time"
+msgstr "Hora Final"
+
+msgid "Stop WiFi"
+msgstr "Parar WiFi"
+
+msgid "Sunday"
+msgstr "Domingo"
+
+msgid "The value %s is invalid"
+msgstr "O valor %s é inválido"
+
+msgid "Thursday"
+msgstr "Quita-feira"
+
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Descarregar Módulos (experimental, poupa mais energia)"
+
+msgid "View Cron Jobs"
+msgstr "Visualizar Tarefas da Cron"
+
+msgid "View Logfile"
+msgstr "Visualizar o Arquivo de Registros (log)"
+
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+msgid "Wifi Schedule"
+msgstr "Agendamento da Wifi"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Arquivo de Registros (log) do Agendamento da Wifi"
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..50953aa
--- /dev/null
@@ -0,0 +1,101 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Activate wifi"
+msgstr "Aktivera wifi"
+
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+msgid "Could not find required programm /usr/bin/iwinfo"
+msgstr ""
+
+msgid "Cron Jobs"
+msgstr "Cron-jobb"
+
+msgid "Day(s) of Week"
+msgstr "Dag(ar) i veckan"
+
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Anger ett schema när wifi ska startas och stängas ner."
+
+msgid "Determine Modules Automatically"
+msgstr "Avgör moduler automatiskt"
+
+msgid "Disable wifi gracefully"
+msgstr "Inaktivera wifi elegant"
+
+msgid "Disabled wifi forced"
+msgstr "Inaktivering av wifi påtvingat"
+
+msgid "Enable"
+msgstr "Aktivera"
+
+msgid "Enable Wifi Schedule"
+msgstr "Aktivera Wifi-schema"
+
+msgid "Enable logging"
+msgstr "Aktivera loggning"
+
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+msgid "Friday"
+msgstr "Fredag"
+
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+msgid "Monday"
+msgstr "Måndag"
+
+msgid "Saturday"
+msgstr "Lördag"
+
+msgid "Schedule"
+msgstr "Schema"
+
+msgid "Schedule events"
+msgstr "Schemalägg händelser"
+
+msgid "Start Time"
+msgstr "Starttid"
+
+msgid "Start WiFi"
+msgstr "Starta WiFi"
+
+msgid "Stop Time"
+msgstr "Stopptid"
+
+msgid "Stop WiFi"
+msgstr "Stoppa WiFi"
+
+msgid "Sunday"
+msgstr "Söndag"
+
+msgid "The value %s is invalid"
+msgstr "Värdet %s är ogiltigt"
+
+msgid "Thursday"
+msgstr "Torsdag"
+
+msgid "Tuesday"
+msgstr "Tisdag"
+
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Befria moduler (experimentiell; sparar mer ström)"
+
+msgid "View Cron Jobs"
+msgstr "Se Cron-jobb"
+
+msgid "View Logfile"
+msgstr "Se loggfilen"
+
+msgid "Wednesday"
+msgstr "Onsdag"
+
+msgid "Wifi Schedule"
+msgstr "Wifi-schema"
+
+msgid "Wifi Schedule Logfile"
+msgstr "Loggfil för Wifi-schema"
diff --git a/applications/luci-app-wireguard/Makefile b/applications/luci-app-wireguard/Makefile
new file mode 100644 (file)
index 0000000..92cdcf2
--- /dev/null
@@ -0,0 +1,17 @@
+#
+# Copyright (C) 2016-2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=WireGuard Status
+LUCI_DEPENDS:=+wireguard-tools +kmod-wireguard
+LUCI_PKGARCH:=all
+
+PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-wireguard/luasrc/controller/wireguard.lua b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua
new file mode 100644 (file)
index 0000000..68a82fe
--- /dev/null
@@ -0,0 +1,8 @@
+-- Copyright 2016-2017 Dan Luedtke <mail@danrl.com>
+-- Licensed to the public under the Apache License 2.0.
+
+module("luci.controller.wireguard", package.seeall)
+
+function index()
+  entry({"admin", "status", "wireguard"}, template("wireguard"), _("WireGuard Status"), 92)
+end
diff --git a/applications/luci-app-wireguard/luasrc/view/wireguard.htm b/applications/luci-app-wireguard/luasrc/view/wireguard.htm
new file mode 100644 (file)
index 0000000..5af6232
--- /dev/null
@@ -0,0 +1,209 @@
+<%#
+ Copyright 2016-2017 Dan Luedtke <mail@danrl.com>
+ Licensed to the public under the Apache License 2.0.
+-%>
+
+<%
+  local data = { }
+  local last_device = ""
+
+  local wg_dump = io.popen("wg show all dump")
+  if wg_dump then
+    local line
+    for line in wg_dump:lines() do
+      local line = string.split(line, "\t")
+      if not (last_device == line[1]) then
+        last_device = line[1]
+        data[line[1]] = {
+          name                 = line[1],
+          public_key           = line[3],
+          listen_port          = line[4],
+          fwmark               = line[5],
+          peers                = { }
+        }
+      else
+        local peer = {
+          public_key           = line[2],
+          endpoint             = line[4],
+          allowed_ips          = { },
+          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[5], ",")) do
+            if #ipvalue > 0 then
+              table.insert(peer['allowed_ips'], ipvalue)
+            end
+          end
+        end
+        table.insert(data[line[1]].peers, peer)
+      end
+    end
+  end
+
+  if luci.http.formvalue("status") == "1" then
+    luci.http.prepare_content("application/json")
+    luci.http.write_json(data)
+    return
+  end
+-%>
+
+<%+header%>
+
+<script type="text/javascript" src="<%=resource%>/cbi.js"></script>
+<script type="text/javascript">//<![CDATA[
+
+  function bytes_to_str(bytes) {
+    bytes = parseFloat(bytes);
+    if (bytes < 1) { return "0 B"; }
+    var sizes = ['B', 'KiB', 'MiB', 'GiB', 'TiB', 'PiB'];
+    var i = parseInt(Math.floor(Math.log(bytes) / Math.log(1024)));
+    return Math.round(bytes / Math.pow(1024, i), 2) + ' ' + sizes[i];
+  };
+
+  function timestamp_to_str(timestamp) {
+    if (timestamp < 1) {
+      return '<%:Never%>';
+    }
+    var now = new Date();
+    var seconds = (now.getTime() / 1000) - timestamp;
+    var ago = "";
+    if (seconds < 60) {
+      ago = parseInt(seconds) + '<%:s ago%>';
+    } else if (seconds < 3600) {
+      ago = parseInt(seconds / 60) + '<%:m ago%>';
+    } else if (seconds < 86401) {
+      ago = parseInt(seconds / 3600) + '<%:h ago%>';
+    } else {
+      ago = '<%:over a day ago%>';
+    }
+    var t = new Date(timestamp * 1000);
+    return t.toUTCString() + ' (' + ago + ')';
+  }
+
+  XHR.poll(5, '<%=REQUEST_URI%>', { status: 1 },
+   function(x, data) {
+    for (var key in data) {
+      if (!data.hasOwnProperty(key)) { continue; }
+      var ifname = key;
+      var iface = data[key];
+      var s = "";
+      if (iface.public_key == '(none)') {
+        s += '<em><%:Interface does not have a public key!%></em>';
+      } else {
+        s += String.format(
+          '<strong><%:Public Key%>: </strong>%s',
+          iface.public_key
+        );
+      }
+      if (iface.listen_port > 0) {
+        s += String.format(
+          '<br /><strong><%:Listen Port%>: </strong>%s',
+          iface.listen_port
+        );
+      }
+      if (iface.fwmark != 'off') {
+        s += String.format(
+          '<br /><strong><%:Firewall Mark%>: </strong>%s',
+          iface.fwmark
+        );
+      }
+      document.getElementById(ifname + "_info").innerHTML = s;
+      for (var i = 0, ilen = iface.peers.length; i < ilen; i++) {
+        var peer = iface.peers[i];
+        var s = String.format(
+          '<strong><%:Public Key%>: </strong>%s',
+          peer.public_key
+        );
+        if (peer.endpoint != '(none)') {
+          s += String.format(
+            '<br /><strong><%:Endpoint%>: </strong>%s',
+            peer.endpoint
+          );
+        }
+        if (peer.allowed_ips.length > 0) {
+          s += '<br /><strong><%:Allowed IPs%>:</strong>';
+          for (var k = 0, klen = peer.allowed_ips.length; k < klen; k++) {
+            s += '<br />&nbsp;&nbsp;&bull;&nbsp;' + peer.allowed_ips[k];
+          }
+        }
+        if (peer.persistent_keepalive != 'off') {
+          s += String.format(
+            '<br /><strong><%:Persistent Keepalive%>: </strong>%ss',
+            peer.persistent_keepalive
+          );
+        }
+        var icon = '<img src="<%=resource%>/icons/tunnel_disabled.png" />';
+        var now = new Date();
+        if (((now.getTime() / 1000) - peer.latest_handshake) < 140) {
+          icon = '<img src="<%=resource%>/icons/tunnel.png" />';
+        }
+        s += String.format(
+          '<br /><strong><%:Latest Handshake%>: </strong>%s',
+          timestamp_to_str(peer.latest_handshake)
+        );
+        s += String.format(
+          '<br /><strong><%:Data Received%>: </strong>%s' +
+          '<br /><strong><%:Data Transmitted%>: </strong>%s',
+          bytes_to_str(peer.transfer_rx),
+          bytes_to_str(peer.transfer_tx)
+        );
+        document.getElementById(ifname + "_" + peer.public_key + "_icon").innerHTML = icon;
+        document.getElementById(ifname + "_" + peer.public_key + "_info").innerHTML = s;
+      }
+    }
+  });
+//]]></script>
+
+<h2>WireGuard Status</h2>
+
+<fieldset class="cbi-section">
+<%-
+for ikey, iface in pairs(data) do
+  -%>
+  <legend><%:Interface%> <%=ikey%></legend>
+  <table width="100%" cellspacing="10">
+    <tr>
+      <td width="33%" style="vertical-align:top"><%:Configuration%></td>
+      <td>
+        <table>
+          <tr>
+            <td id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px">
+              &nbsp;
+            </td>
+            <td id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px">
+              <em><%:Collecting data...%></em>
+            </td>
+        </tr></table>
+      </td>
+    </tr>
+  <%-
+  for pkey, peer in pairs(iface.peers) do
+    -%>
+    <tr>
+      <td width="33%" style="vertical-align:top"><%:Peer%></td>
+      <td>
+        <table>
+          <tr>
+            <td id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align:center; padding:3px">
+              <img src="<%=resource%>/icons/tunnel_disabled.png" /><br />
+              <small>?</small>
+            </td>
+            <td id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px">
+              <em><%:Collecting data...%></em>
+            </td>
+        </tr></table>
+      </td>
+    </tr>
+    <%-
+  end
+  -%>
+  </table>
+  <%-
+end
+-%>
+</fieldset>
+
+<%+footer%>
diff --git a/applications/luci-app-wireguard/po/ja/wireguard.po b/applications/luci-app-wireguard/po/ja/wireguard.po
new file mode 100644 (file)
index 0000000..5cd7a90
--- /dev/null
@@ -0,0 +1,74 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2017-02-28 00:31+0900\n"
+"Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
+"Language-Team: \n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.12\n"
+"X-Poedit-Basepath: .\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+
+msgid "Allowed IPs"
+msgstr "許可されたIP"
+
+msgid "Collecting data..."
+msgstr "データ収集中です..."
+
+msgid "Configuration"
+msgstr "設定"
+
+msgid "Data Received"
+msgstr "受信済みデータ"
+
+msgid "Data Transmitted"
+msgstr "送信済みデータ"
+
+msgid "Endpoint"
+msgstr "エンドポイント"
+
+msgid "Firewall Mark"
+msgstr "ファイアウォール マーク"
+
+msgid "Interface"
+msgstr "インターフェース"
+
+msgid "Interface does not have a public key!"
+msgstr "インターフェースに公開鍵がありません!"
+
+msgid "Latest Handshake"
+msgstr "最新のハンドシェイク"
+
+msgid "Listen Port"
+msgstr "待ち受けポート"
+
+msgid "Never"
+msgstr "無し"
+
+msgid "Peer"
+msgstr "ピア"
+
+msgid "Persistent Keepalive"
+msgstr "永続的なキープアライブ"
+
+msgid "Public Key"
+msgstr "公開鍵"
+
+msgid "WireGuard Status"
+msgstr "WireGuard ステータス"
+
+msgid "h ago"
+msgstr "時間前"
+
+msgid "m ago"
+msgstr "分前"
+
+msgid "over a day ago"
+msgstr "1日以上前"
+
+msgid "s ago"
+msgstr "秒前"
diff --git a/applications/luci-app-wireguard/po/pt-br/wireguard.po b/applications/luci-app-wireguard/po/pt-br/wireguard.po
new file mode 100644 (file)
index 0000000..d3b5059
--- /dev/null
@@ -0,0 +1,73 @@
+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 "Allowed IPs"
+msgstr "Endereços IP autorizados"
+
+msgid "Collecting data..."
+msgstr "Coletando dados..."
+
+msgid "Configuration"
+msgstr "Configuração"
+
+msgid "Data Received"
+msgstr "Dados Recebidos"
+
+msgid "Data Transmitted"
+msgstr "Dados Enviados"
+
+msgid "Endpoint"
+msgstr "Equipamento do ponto final"
+
+msgid "Firewall Mark"
+msgstr "Marca do Firewall"
+
+msgid "Interface"
+msgstr "Interface"
+
+msgid "Interface does not have a public key!"
+msgstr "A interface não tem uma chave pública!"
+
+msgid "Latest Handshake"
+msgstr "Última Negociação"
+
+msgid "Listen Port"
+msgstr "Porta de Escuta"
+
+msgid "Never"
+msgstr "Nunca"
+
+msgid "Peer"
+msgstr "Parceiro"
+
+msgid "Persistent Keepalive"
+msgstr "Manter Conexões Abertas (Keepalive)"
+
+msgid "Public Key"
+msgstr "Chave Pública"
+
+msgid "WireGuard Status"
+msgstr "Estado do WireGuard"
+
+msgid "h ago"
+msgstr "horas atrás"
+
+msgid "m ago"
+msgstr "meses atrás"
+
+msgid "over a day ago"
+msgstr "mais de um dia atrás"
+
+msgid "s ago"
+msgstr "segundos atrás"
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..3422ae9
--- /dev/null
@@ -0,0 +1,62 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8\n"
+
+msgid "Allowed IPs"
+msgstr "Tillåtna IP-adresser"
+
+msgid "Collecting data..."
+msgstr "Samlar in data..."
+
+msgid "Configuration"
+msgstr "Konfiguration"
+
+msgid "Data Received"
+msgstr "Mottagen data"
+
+msgid "Data Transmitted"
+msgstr "Överförd data"
+
+msgid "Endpoint"
+msgstr "Slutpunkt"
+
+msgid "Firewall Mark"
+msgstr "Brandväggsmarkering"
+
+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 "Jämlike"
+
+msgid "Persistent Keepalive"
+msgstr "Hålla vid liv ständigt"
+
+msgid "Public Key"
+msgstr "Publik nyckel"
+
+msgid "WireGuard Status"
+msgstr "Status för WireGuard"
+
+msgid "h ago"
+msgstr "t sedan"
+
+msgid "m ago"
+msgstr "m sedan"
+
+msgid "over a day ago"
+msgstr "över en dag sedan"
+
+msgid "s ago"
+msgstr "s sedan"
diff --git a/applications/luci-app-wireguard/po/templates/wireguard.pot b/applications/luci-app-wireguard/po/templates/wireguard.pot
new file mode 100644 (file)
index 0000000..9ec5c60
--- /dev/null
@@ -0,0 +1,62 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+msgid "Allowed IPs"
+msgstr ""
+
+msgid "Collecting data..."
+msgstr ""
+
+msgid "Configuration"
+msgstr ""
+
+msgid "Data Received"
+msgstr ""
+
+msgid "Data Transmitted"
+msgstr ""
+
+msgid "Endpoint"
+msgstr ""
+
+msgid "Firewall Mark"
+msgstr ""
+
+msgid "Interface"
+msgstr ""
+
+msgid "Interface does not have a public key!"
+msgstr ""
+
+msgid "Latest Handshake"
+msgstr ""
+
+msgid "Listen Port"
+msgstr ""
+
+msgid "Never"
+msgstr ""
+
+msgid "Peer"
+msgstr ""
+
+msgid "Persistent Keepalive"
+msgstr ""
+
+msgid "Public Key"
+msgstr ""
+
+msgid "WireGuard Status"
+msgstr ""
+
+msgid "h ago"
+msgstr ""
+
+msgid "m ago"
+msgstr ""
+
+msgid "over a day ago"
+msgstr ""
+
+msgid "s ago"
+msgstr ""
diff --git a/applications/luci-app-wireguard/po/zh-cn/wireguard.po b/applications/luci-app-wireguard/po/zh-cn/wireguard.po
new file mode 100644 (file)
index 0000000..e873a83
--- /dev/null
@@ -0,0 +1,73 @@
+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 2.0.1\n"
+"Last-Translator: liushuyu <liushuyu011@gmail.com>\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"Language: zh_CN\n"
+
+msgid "Allowed IPs"
+msgstr "允许的 IP"
+
+msgid "Collecting data..."
+msgstr "正在收集数据..."
+
+msgid "Configuration"
+msgstr "配置"
+
+msgid "Data Received"
+msgstr "已接收"
+
+msgid "Data Transmitted"
+msgstr "已发送"
+
+msgid "Endpoint"
+msgstr "传输端点"
+
+msgid "Firewall Mark"
+msgstr "防火墙标识"
+
+msgid "Interface"
+msgstr "接口"
+
+msgid "Interface does not have a public key!"
+msgstr "接口没有配置公钥!"
+
+msgid "Latest Handshake"
+msgstr "上次握手"
+
+msgid "Listen Port"
+msgstr "监听端口"
+
+msgid "Never"
+msgstr "从不"
+
+msgid "Peer"
+msgstr "对端"
+
+msgid "Persistent Keepalive"
+msgstr "Keepalive 间隔(秒)"
+
+msgid "Public Key"
+msgstr "公钥"
+
+msgid "WireGuard Status"
+msgstr "WireGuard 状态"
+
+msgid "h ago"
+msgstr "小时前"
+
+msgid "m ago"
+msgstr "分钟前"
+
+msgid "over a day ago"
+msgstr "超过一天前"
+
+msgid "s ago"
+msgstr "秒前"
index bf23eb8..d0c35f4 100644 (file)
@@ -16,7 +16,7 @@ msgstr ""
 "X-Generator: Pootle 2.0.6\n"
 
 msgid "Broadcast on all interfaces"
-msgstr "Broadcast su tutte le interfaccie"
+msgstr "Broadcast su tutte le interfacce"
 
 msgid "Choose the host to wake up or enter a custom MAC address to use"
 msgstr "Scegli l'host da \"svegliare\" o inserisci il MAC address da usare"
@@ -25,20 +25,20 @@ msgid "Host to wake up"
 msgstr "Host da \"svegliare\""
 
 msgid "Network interface to use"
-msgstr "Interfacci di rete da usare"
+msgstr "Interfaccia di rete da usare"
 
 msgid "Send to broadcast address"
-msgstr ""
+msgstr "Manda a indirizzo di broadcast"
 
 #, fuzzy
 msgid ""
 "Sometimes only one of the two tools works. If one fails, try the other one"
 msgstr ""
-"Avvolte solo uno dei due tools funziona. Se uno fallisce, tenta di usare il "
+"A volte solo uno dei due tools funziona. Se uno fallisce, tenta di usare il "
 "secondo"
 
 msgid "Specifies the interface the WoL packet is sent on"
-msgstr "Secifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato"
+msgstr "Specifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato"
 
 msgid "Starting WoL utility:"
 msgstr "Avvia l'utility WoL:"
@@ -49,8 +49,8 @@ msgstr "Wake on LAN"
 msgid ""
 "Wake on LAN is a mechanism to remotely boot computers in the local network."
 msgstr ""
-"Wake on LAN è un meccanismo che ti permette di avviare da remoto un computer "
-"collegato alla LAN."
+"Wake on LAN è un meccanismo che permette di avviare da remoto i computer "
+"nella rete locale"
 
 msgid "Wake up host"
 msgstr "Sveglia Host"
index 6195e4c..783ec0b 100644 (file)
@@ -2,18 +2,18 @@
 #
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-04-19 00:29+0200\n"
-"PO-Revision-Date: 2011-10-11 20:31+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
+"PO-Revision-Date: 2017-02-20 18:13-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language-Team: none\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.4\n"
+"X-Generator: Poedit 1.8.11\n"
 
 msgid "Broadcast on all interfaces"
 msgstr "Broadcast em todas as interfaces"
@@ -28,14 +28,13 @@ msgid "Network interface to use"
 msgstr "Interfaces de rede para usar"
 
 msgid "Send to broadcast address"
-msgstr ""
+msgstr "Enviar para o endereço de broadcast"
 
-#, fuzzy
 msgid ""
 "Sometimes only one of the two tools works. If one fails, try the other one"
 msgstr ""
-"Algumas vezes, somente uma das ferramentas funciona. Se uma delas falhar, "
-"tente a outra"
+"Algumas vezes, somente uma das duas ferramentas funciona. Se uma delas "
+"falhar, tente a outra"
 
 msgid "Specifies the interface the WoL packet is sent on"
 msgstr "Especifica a interface para onde os pacotes de WoL serão enviados"
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 7bbae61..3c66a16 100644 (file)
@@ -1,23 +1,26 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2010-04-19 00:29+0200\n"
-"PO-Revision-Date: 2012-06-21 17:52+0200\n"
-"Last-Translator: phantasm131 <phantasm131@gmail.com>\n"
-"Language-Team: QQ Group 75543259 <axishero@foxmail.com>\n"
+"PO-Revision-Date: 2017-10-28 16:44+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Broadcast on all interfaces"
 msgstr "向所有接口广播"
 
 msgid "Choose the host to wake up or enter a custom MAC address to use"
-msgstr "选择要唤醒的主机或者输入自定义mac地址"
+msgstr "选择要唤醒的主机,或者输入自定义 MAC 地址"
 
 msgid "Host to wake up"
 msgstr "选择要唤醒的主机"
@@ -26,7 +29,7 @@ msgid "Network interface to use"
 msgstr "选择使用的网络接口"
 
 msgid "Send to broadcast address"
-msgstr ""
+msgstr "发送到广播地址"
 
 #, fuzzy
 msgid ""
@@ -34,17 +37,17 @@ msgid ""
 msgstr "有时只有一个工具生效。如果其中一个失效,请尝试另一个"
 
 msgid "Specifies the interface the WoL packet is sent on"
-msgstr "限定网络唤醒数据包将被发送到的接口"
+msgstr "限定将发送网络唤醒数据包的接口"
 
 msgid "Starting WoL utility:"
-msgstr "正在启动网络唤醒工具"
+msgstr "正在启动网络唤醒工具"
 
 msgid "Wake on LAN"
 msgstr "网络唤醒"
 
 msgid ""
 "Wake on LAN is a mechanism to remotely boot computers in the local network."
-msgstr "ç½\91ç»\9cå\94¤é\86\92æ\8f\90ä¾\9bäº\86ä»\8e远程启动本地网络内计算机的机制。"
+msgstr "ç½\91ç»\9cå\94¤é\86\92æ\98¯ä¸\80个远程启动本地网络内计算机的机制。"
 
 msgid "Wake up host"
 msgstr "唤醒主机"
index 553d2d0..3ef8ea2 100644 (file)
@@ -1,51 +1,56 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017.
+#
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-14 10:25+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2017-10-28 16:44+0800\n"
+"Last-Translator: Yangfl <mmyangfl@gmail.com>\n"
+"Language-Team:  <debian-l10n-chinese@lists.debian.org>\n"
 "Language: zh_TW\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"
+"X-Generator: Gtranslator 2.91.7\n"
 
 msgid "Broadcast on all interfaces"
-msgstr "廣æ\92­å\88°æ\89\80æ\9c\89ä»\8bé\9d¢"
+msgstr "å\90\91æ\89\80æ\9c\89ä»\8bé\9d¢å»£æ\92­"
 
 msgid "Choose the host to wake up or enter a custom MAC address to use"
-msgstr "叫醒訂選的主機或者打入特定的MAC位址以便使用"
+msgstr "選擇要喚醒的主機,或者輸入自定義 MAC 位址"
 
 msgid "Host to wake up"
-msgstr "要喚醒主機清單"
+msgstr "選擇要喚醒的主機"
 
 msgid "Network interface to use"
-msgstr "使用的網路介面"
+msgstr "選擇使用的網路介面"
 
 msgid "Send to broadcast address"
-msgstr ""
+msgstr "傳送到廣播位址"
 
 #, fuzzy
 msgid ""
 "Sometimes only one of the two tools works. If one fails, try the other one"
-msgstr "æ\9f\90äº\9bæ\99\82å\80\99å\85¨é\83¨å·¥å\85·è£¡é\9d¢å\8fªæ\9c\89ä¸\80å\80\8bç\99¼ç\94\9fä½\9cç\94¨,試試å\8f¦å¤\96一個"
+msgstr "æ\9c\89æ\99\82å\8fªæ\9c\89ä¸\80å\80\8bå·¥å\85·ç\94\9fæ\95\88ã\80\82å¦\82æ\9e\9cå\85¶ä¸­ä¸\80å\80\8b失æ\95\88ï¼\8cè«\8bå\98\97試å\8f¦一個"
 
 msgid "Specifies the interface the WoL packet is sent on"
-msgstr "指定WoL喚醒封包將傳到哪個介面"
+msgstr "限定將傳送網路喚醒資料包的介面"
 
 msgid "Starting WoL utility:"
-msgstr "啟用喚醒工具:"
+msgstr "正在啟動網路喚醒工具:"
 
 msgid "Wake on LAN"
-msgstr "LAN區網喚醒"
+msgstr "網路喚醒"
 
 msgid ""
 "Wake on LAN is a mechanism to remotely boot computers in the local network."
-msgstr "Wol就是在本地網路中針對遠端開機電腦喚醒的機制"
+msgstr "網路喚醒是一個遠端啟動本地網路內計算機的機制。"
 
 msgid "Wake up host"
 msgstr "喚醒主機"
 
 msgid "WoL program"
-msgstr "Wol喚醒程式"
+msgstr "網路喚醒程式"
diff --git a/applications/luci-app-wshaper/Makefile b/applications/luci-app-wshaper/Makefile
deleted file mode 100644 (file)
index 63e63ab..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-#
-# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
-#
-# This is free software, licensed under the Apache License, Version 2.0 .
-#
-
-include $(TOPDIR)/rules.mk
-
-LUCI_TITLE:=LuCI Support for wshaper
-LUCI_DEPENDS:=+wshaper
-
-include ../../luci.mk
-
-# call BuildPackage - OpenWrt buildroot signature
diff --git a/applications/luci-app-wshaper/luasrc/controller/wshaper.lua b/applications/luci-app-wshaper/luasrc/controller/wshaper.lua
deleted file mode 100644 (file)
index 2d0fe48..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
--- Copyright 2011 Manuel Munz <freifunk somakoma de>
--- Licensed to the public under the Apache License 2.0.
-
-module "luci.controller.wshaper"
-
-function index()
-       entry({"admin", "network", "wshaper"}, cbi("wshaper"), _("Wondershaper"), 80)
-end
-
diff --git a/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua b/applications/luci-app-wshaper/luasrc/model/cbi/wshaper.lua
deleted file mode 100644 (file)
index 6bd0255..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
--- Copyright 2011 Manuel Munz <freifunk at somakoma dot de>
--- Licensed to the public under the Apache License 2.0.
-
-require("luci.tools.webadmin")
-
-m = Map("wshaper", translate("Wondershaper"),
-       translate("Wondershaper shapes traffic to ensure low latencies for interactive traffic even when your " ..
-       "internet connection is highly saturated."))
-
-s = m:section(NamedSection, "settings", "wshaper", translate("Wondershaper settings"))
-s.anonymous = true
-
-network = s:option(ListValue, "network", translate("Interface"))
-luci.tools.webadmin.cbi_add_networks(network)
-
-uplink = s:option(Value, "uplink", translate("Uplink"), translate("Upstream bandwidth in kbit/s"))
-uplink.optional = false
-uplink.datatype = "uinteger"
-uplink.default = "240"
-
-uplink = s:option(Value, "downlink", translate("Downlink"), translate("Downstream bandwidth in kbit/s"))
-uplink.optional = false
-uplink.datatype = "uinteger"
-uplink.default = "200"
-
-nopriohostsrc = s:option(DynamicList, "nopriohostsrc", translate("Low priority hosts (Source)"), translate("Host or Network in CIDR notation."))
-nopriohostsrc.optional = true
-nopriohostsrc.datatype = ipaddr
-nopriohostsrc.placeholder = "10.0.0.1/32"
-
-nopriohostdst = s:option(DynamicList, "nopriohostdst", translate("Low priority hosts (Destination)"), translate("Host or Network in CIDR notation."))
-nopriohostdst.optional = true
-nopriohostdst.datatype = ipaddr
-nopriohostdst.placeholder = "10.0.0.1/32"
-
-noprioportsrc = s:option(DynamicList, "noprioportsrc", translate("Low priority source ports"))
-noprioportsrc.optional = true
-noprioportsrc.datatype = "range(0,65535)"
-noprioportsrc.placeholder = "21"
-
-noprioportdst = s:option(DynamicList, "noprioportdst", translate("Low priority destination ports"))
-noprioportdst.optional = true
-noprioportdst.datatype = "range(0,65535)"
-noprioportdst.placeholder = "21"
-
-return m
diff --git a/applications/luci-app-wshaper/po/ca/wshaper.po b/applications/luci-app-wshaper/po/ca/wshaper.po
deleted file mode 100644 (file)
index 2560383..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-01 22:51+0200\n"
-"PO-Revision-Date: 2014-07-01 03:51+0200\n"
-"Last-Translator: Alex <alexhenrie24@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ca\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr "Enllaç descendent"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Amplada de banda descendent en kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Host o xarxa en notació CIDR."
-
-msgid "Interface"
-msgstr "Interfície"
-
-msgid "Low priority destination ports"
-msgstr "Ports de destí de baixa prioritat"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Hosts de baixa prioritat (destí)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Hosts de baixa prioritat (origen)"
-
-msgid "Low priority source ports"
-msgstr "Ports d'origen de baixa prioritat"
-
-msgid "Uplink"
-msgstr "Enllaç ascendent"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Amplada de banda ascendent en kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Ajusts del Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershapter afaiçona el trànsit per assegurar latències baixes per a "
-"trànsit interactiu encara que la vostra connexió de Internet estigui "
-"altament saturada."
diff --git a/applications/luci-app-wshaper/po/cs/wshaper.po b/applications/luci-app-wshaper/po/cs/wshaper.po
deleted file mode 100644 (file)
index bca6c4e..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-04-24 15:20+0200\n"
-"Last-Translator: awm1 <awm1klimes8vladimir@gmail.com>\n"
-"Language-Team: none\n"
-"Language: cs\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-"X-Generator: Pootle 2.0.4\n"
-
-msgid "Downlink"
-msgstr "Příchozí rychlost"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Rychlost stahování dat v kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Adresa počítače nebo sítě v CIDR notaci."
-
-msgid "Interface"
-msgstr "Síťové rozhraní"
-
-msgid "Low priority destination ports"
-msgstr "Cílové porty s nízkou prioritou"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Adresy cílových počítačů s nízkou prioritou"
-
-msgid "Low priority hosts (Source)"
-msgstr "Adresy zdrojových počítačů s nízkou prioritou"
-
-msgid "Low priority source ports"
-msgstr "Zdrojové porty s nízkou prioritou"
-
-msgid "Uplink"
-msgstr "Odchozí rychlost"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Rychlost odesílání dat v kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Nastavení skriptu Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Úkolem skriptu Wondershaper je řízení provozu na daném síťovém rozhraní. "
-"Snaží se zajistit nízké přenosové zpoždění pro \"interaktivní\" síťový "
-"provoz (např. SSH), a to především v okamžicích, kdy ostatní síťový provoz "
-"zahltí linku."
diff --git a/applications/luci-app-wshaper/po/de/wshaper.po b/applications/luci-app-wshaper/po/de/wshaper.po
deleted file mode 100644 (file)
index 39dd617..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: \n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: 2011-10-18 12:28+0200\n"
-"Last-Translator: Manuel <freifunk@somakoma.de>\n"
-"Language-Team: \n"
-"Language: de\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-msgid "Downlink"
-msgstr "Download"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Download Bandbreite in kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Rechner oder Netzwerk in CIDR Schreibweise"
-
-msgid "Interface"
-msgstr "Schnittstelle"
-
-msgid "Low priority destination ports"
-msgstr "Zielports mit niedriger Priorität"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Zielrechner mit nideriger Priorität"
-
-msgid "Low priority hosts (Source)"
-msgstr "Quellrechner mit neidriger Priorität"
-
-msgid "Low priority source ports"
-msgstr "Quellports mit niedriger Priorität"
-
-msgid "Uplink"
-msgstr "Upload"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Upload Bandbreite in kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Wondershaper Einstellungen"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper ermöglicht mit Hilfe von Traffic Shaping niedrige Latenzzeiten "
-"für interaktiven Internetverkehr selbst wenn die Internetverbindung extrem "
-"ausgelastet ist."
diff --git a/applications/luci-app-wshaper/po/el/wshaper.po b/applications/luci-app-wshaper/po/el/wshaper.po
deleted file mode 100644 (file)
index 6d2f092..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-18 17:10+0200\n"
-"PO-Revision-Date: 2012-03-18 17:10+0200\n"
-"Last-Translator: Vasilis <acinonyx@openwrt.gr>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: el\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr "Διεπαφή"
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/en/wshaper.po b/applications/luci-app-wshaper/po/en/wshaper.po
deleted file mode 100644 (file)
index b685839..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: en\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/es/wshaper.po b/applications/luci-app-wshaper/po/es/wshaper.po
deleted file mode 100644 (file)
index f562760..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-16 01:00+0200\n"
-"PO-Revision-Date: 2012-09-03 18:57+0200\n"
-"Last-Translator: José Vicente <josevteg@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: es\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr "Enlace de bajada"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Ancho de banda de bajada en Kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Máquina o red en notación CIDR."
-
-msgid "Interface"
-msgstr "Interfaz"
-
-msgid "Low priority destination ports"
-msgstr "Puertos de destino de prioridad baja"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Máquinas de prioridad baja (destino)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Máquinas de prioridad baja (origen)"
-
-msgid "Low priority source ports"
-msgstr "Puertos de origen de prioridad baja"
-
-msgid "Uplink"
-msgstr "Enlace de salida"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Ancho de banda de subida en Kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Configuración de Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper modela el tráfico para asegurar latencias bajas al tráfico "
-"interactivo incluso cuando la conexión a Internet esté muy saturada."
diff --git a/applications/luci-app-wshaper/po/fr/wshaper.po b/applications/luci-app-wshaper/po/fr/wshaper.po
deleted file mode 100644 (file)
index 2fc9f53..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-msgid ""
-msgstr ""
-"Content-Type: text/plain; charset=UTF-8\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: fr\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr "Lien descendant (télé-chargement)"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Bande-passante descendante en kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Hôte ou réseau en notation CIDR."
-
-msgid "Interface"
-msgstr "Interface"
-
-msgid "Low priority destination ports"
-msgstr "Ports-cible à faible priorité"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Hôtes-cible à faible priorité"
-
-msgid "Low priority hosts (Source)"
-msgstr "Hôtes-source à faible priorité"
-
-msgid "Low priority source ports"
-msgstr "Ports-source à faible priorité"
-
-msgid "Uplink"
-msgstr "Lien montant (envois)"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Bande-passante montante en kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Paramètres Wondershaper"
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-
-#~ msgid ""
-#~ "Wondershaper uses traffic shaping to ensure low latencies for interactive "
-#~ "traffic even when your internet connection is highly saturated."
-#~ msgstr ""
-#~ "Wondershaper gère la priorités entre les flux pour assurer une faible "
-#~ "latence au trafic interactif même quand votre connexion Internet est très "
-#~ "chargée."
diff --git a/applications/luci-app-wshaper/po/he/wshaper.po b/applications/luci-app-wshaper/po/he/wshaper.po
deleted file mode 100644 (file)
index f03d5df..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: he\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/hu/wshaper.po b/applications/luci-app-wshaper/po/hu/wshaper.po
deleted file mode 100644 (file)
index 2377fa5..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-
-msgid "Downlink"
-msgstr "Letöltés"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Letöltési sebesség kbit/másodberc-ben"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Gép vagy hálózat (CIDR jelöléssel)"
-
-msgid "Interface"
-msgstr "Interfész"
-
-msgid "Low priority destination ports"
-msgstr "Alacsony prioritású cél portok"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Alacson prioritású cél gépek"
-
-msgid "Low priority hosts (Source)"
-msgstr "Alacsony prioritású forrás gépek"
-
-msgid "Low priority source ports"
-msgstr "Alacson prioritású forrás portok"
-
-msgid "Uplink"
-msgstr "Feltöltés"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Feltöltési sebesség kbit/másodperc-ben"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Wondershaper beállítások"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"A Wondershaper 'traffic shaping'-et használatával biztosítja az interaktív "
-"forgalom alacsony késleletetését még akkor is ha az internet kapcsolat "
-"erősen leterhelt."
diff --git a/applications/luci-app-wshaper/po/it/wshaper.po b/applications/luci-app-wshaper/po/it/wshaper.po
deleted file mode 100644 (file)
index 6a72c7e..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-01-28 01:36+0200\n"
-"PO-Revision-Date: 2013-02-03 14:07+0200\n"
-"Last-Translator: Francesco <3gasas@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: it\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr "Collegamento discendente"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Larghezza di banda in downstream in kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Host o rete in notazione CIDR."
-
-msgid "Interface"
-msgstr "Interfaccia"
-
-msgid "Low priority destination ports"
-msgstr "Porte di destinazione a bassa priorità"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Hosts a bassa priorità (Destinazione)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Hosts a bassa priorità (Fonte)"
-
-msgid "Low priority source ports"
-msgstr "Porte sorgenti a bassa priorità"
-
-msgid "Uplink"
-msgstr "Uplink"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Larghezza di banda in upstream in kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Impostazioni Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"WonderShaper usa la regolazione del traffico per garantire bassa latenza per "
-"il traffico interattivo anche quando la connessione a Internet è molto "
-"satura."
diff --git a/applications/luci-app-wshaper/po/ja/wshaper.po b/applications/luci-app-wshaper/po/ja/wshaper.po
deleted file mode 100644 (file)
index d58476c..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-03-17 18:28+0200\n"
-"PO-Revision-Date: 2012-03-18 09:07+0200\n"
-"Last-Translator: Kentaro <kentaro.matsuyama@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ja\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.4\n"
-
-msgid "Downlink"
-msgstr "下りリンク"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "下りリンク帯域 (kbit/sec)"
-
-msgid "Host or Network in CIDR notation."
-msgstr "ホスト名またはCIDR表記のネットワークアドレス"
-
-msgid "Interface"
-msgstr "インターフェース"
-
-msgid "Low priority destination ports"
-msgstr "低優先度の宛先ポート"
-
-msgid "Low priority hosts (Destination)"
-msgstr "低優先度の宛先ホスト"
-
-msgid "Low priority hosts (Source)"
-msgstr "低優先度の送信元ホスト"
-
-msgid "Low priority source ports"
-msgstr "低優先度の送信元ポート"
-
-msgid "Uplink"
-msgstr "上りリンク"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "上りリンク帯域 (kbit/sec)"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Wondershaper 設定"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondweshaperは、インターネット接続が飽和状態の場合でも、低いレイテンシ・円滑"
-"な通信を実現するためにトラフィック・シェーピングを行います。"
diff --git a/applications/luci-app-wshaper/po/ms/wshaper.po b/applications/luci-app-wshaper/po/ms/wshaper.po
deleted file mode 100644 (file)
index ede1386..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Plural-Forms: nplurals=1; plural=0;\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: ms\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/no/wshaper.po b/applications/luci-app-wshaper/po/no/wshaper.po
deleted file mode 100644 (file)
index 1b1ab32..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Language: nn\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/pl/wshaper.po b/applications/luci-app-wshaper/po/pl/wshaper.po
deleted file mode 100644 (file)
index a85bf00..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-04-14 14:15+0200\n"
-"PO-Revision-Date: 2012-04-14 17:21+0200\n"
-"Last-Translator: Tomecki <przykryweczka@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: pl\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
-"|| n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-msgid "Downlink"
-msgstr "Downlink"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Przepustowość pobierania w kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Adres hosta lub adres sieci w notacji CIDR"
-
-msgid "Interface"
-msgstr "Interfejs"
-
-msgid "Low priority destination ports"
-msgstr "Porty docelowe o niskim priorytecie"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Hosty docelowe o niskim priorytecie"
-
-msgid "Low priority hosts (Source)"
-msgstr "Hosty źródłowe o niskim priorytecie"
-
-msgid "Low priority source ports"
-msgstr "Porty źródłowe o niskim priorytecie"
-
-msgid "Uplink"
-msgstr "Uplink"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Przepustowość wysyłania w kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Ustawienia Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper wykorzystuje kształtowanie ruchu aby zapewnić niskie opóźnienia "
-"nawet wtedy, gdy Twoje połączenie internetowe jest wysycone."
diff --git a/applications/luci-app-wshaper/po/pt-br/wshaper.po b/applications/luci-app-wshaper/po/pt-br/wshaper.po
deleted file mode 100644 (file)
index f973ebb..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-18 19:32+0200\n"
-"PO-Revision-Date: 2011-10-18 19:39+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: pt_BR\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.4\n"
-
-msgid "Downlink"
-msgstr "Velocidade para baixar (downlink)"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Taxa de transferência para baixar em kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Equipamento ou Rede na notação CIDR."
-
-msgid "Interface"
-msgstr "Interface"
-
-msgid "Low priority destination ports"
-msgstr "Portas de destino de baixa prioridade"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Equipamentos de baixa prioridade (Destino)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Equipamentos de baixa prioridade (Origem)"
-
-msgid "Low priority source ports"
-msgstr "Portas de origem de baixa prioridade"
-
-msgid "Uplink"
-msgstr "Velocidade para subir (uplink)"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Taxa de transferência para subir em kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Configuração do Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper usa o controle de tráfego para garantir baixa latência para "
-"tráfego interativo mesmo quando sua conexão com a internet está extremamente "
-"saturada."
diff --git a/applications/luci-app-wshaper/po/pt/wshaper.po b/applications/luci-app-wshaper/po/pt/wshaper.po
deleted file mode 100644 (file)
index 96a7be8..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-05-31 12:13+0200\n"
-"PO-Revision-Date: 2013-05-31 12:15+0200\n"
-"Last-Translator: joao.f.vieira <joao.f.vieira@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: pt\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr "Interface"
-
-msgid "Low priority destination ports"
-msgstr "Porta de destino com baixa prioridade"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Hosts com baixa prioridade (Destino)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Hosts com baixa prioridade (Origem)"
-
-msgid "Low priority source ports"
-msgstr "Portas de origem com baixa prioridade"
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/ro/wshaper.po b/applications/luci-app-wshaper/po/ro/wshaper.po
deleted file mode 100644 (file)
index d2569f6..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2014-06-28 18:45+0200\n"
-"PO-Revision-Date: 2014-06-28 18:46+0200\n"
-"Last-Translator: xxvirusxx <condor20_05@yahoo.it>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
-"Language: ro\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : (n==0 || (n%100 > 0 && n%100 < "
-"20)) ? 1 : 2);;\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/ru/wshaper.po b/applications/luci-app-wshaper/po/ru/wshaper.po
deleted file mode 100644 (file)
index 1984aac..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: LuCI: wsharper\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2012-01-26 15:09+0200\n"
-"PO-Revision-Date: 2012-08-15 11:53+0300\n"
-"Last-Translator: Roman A. aka BasicXP <x12ozmouse@ya.ru>\n"
-"Language-Team: Russian <x12ozmouse@ya.ru>\n"
-"Language: ru\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.4\n"
-"X-Poedit-SourceCharset: UTF-8\n"
-
-msgid "Downlink"
-msgstr "Нисходящий канал"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Ширина полосы пропускания прямого канала (кбит/с)"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Хост или сеть в нотации CIDR."
-
-msgid "Interface"
-msgstr "Интерфейс"
-
-msgid "Low priority destination ports"
-msgstr "Низкоприоритетные порты назначения"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Низкоприоритетные хосты назначения"
-
-msgid "Low priority hosts (Source)"
-msgstr "Низкоприоритетные хосты источника"
-
-msgid "Low priority source ports"
-msgstr "Низкоприоритетные порты источника"
-
-msgid "Uplink"
-msgstr "Восходящий канал"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Пропускная способность обратного канала (кбит/c)"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Установки Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper использует формирование трафика для обеспечения низких задержек "
-"интерактивного трафика даже в случае высокой загруженности интернет-"
-"соединения."
diff --git a/applications/luci-app-wshaper/po/sk/wshaper.po b/applications/luci-app-wshaper/po/sk/wshaper.po
deleted file mode 100644 (file)
index 4e03aa8..0000000
+++ /dev/null
@@ -1,50 +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"
-"MIME-Version: 1.0\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/sv/wshaper.po b/applications/luci-app-wshaper/po/sv/wshaper.po
deleted file mode 100644 (file)
index 4f0fc53..0000000
+++ /dev/null
@@ -1,53 +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 "Downlink"
-msgstr "Nerladdningslänk"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Nerströms bandbredd i kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Värd eller Nätverk i CIDR-noteringen"
-
-msgid "Interface"
-msgstr "Gränssnitt"
-
-msgid "Low priority destination ports"
-msgstr "Destinations-portar med låg prioritet"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Värdar med låg prioritet (Destination)"
-
-msgid "Low priority hosts (Source)"
-msgstr "Värdar med låg prioritet (Källa)"
-
-msgid "Low priority source ports"
-msgstr "Käll-portar med låg prioritet"
-
-msgid "Uplink"
-msgstr "Uppladdningslänk"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Bandbredd uppströms i kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Inställningar för Wondershaper"
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper formar trafiken för att säkerställa låga latenser för "
-"interaktiv trafik även när din internetanslutning är mättad som mest."
diff --git a/applications/luci-app-wshaper/po/templates/wshaper.pot b/applications/luci-app-wshaper/po/templates/wshaper.pot
deleted file mode 100644 (file)
index 42de011..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-msgid ""
-msgstr "Content-Type: text/plain; charset=UTF-8"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/tr/wshaper.po b/applications/luci-app-wshaper/po/tr/wshaper.po
deleted file mode 100644 (file)
index 7c0acb0..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Last-Translator: Automatically generated\n"
-"Language-Team: none\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"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/uk/wshaper.po b/applications/luci-app-wshaper/po/uk/wshaper.po
deleted file mode 100644 (file)
index 94d20df..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2012-04-28 21:54+0200\n"
-"Last-Translator: Yurii <yuripet@gmail.com>\n"
-"Language-Team: none\n"
-"Language: uk\n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%"
-"10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
-"X-Generator: Pootle 2.0.6\n"
-
-msgid "Downlink"
-msgstr "Прямий канал"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "Ширина смуги пропускання прямого каналу (кбіт/с)"
-
-msgid "Host or Network in CIDR notation."
-msgstr "Вузол або мережа в нотації CIDR."
-
-msgid "Interface"
-msgstr "Інтерфейс"
-
-msgid "Low priority destination ports"
-msgstr "Низькопріоритетні порти призначення"
-
-msgid "Low priority hosts (Destination)"
-msgstr "Низькопріоритетні вузли призначення"
-
-msgid "Low priority hosts (Source)"
-msgstr "Низькопріоритетні вузли джерела"
-
-msgid "Low priority source ports"
-msgstr "Низькопріоритетні порти джерела"
-
-msgid "Uplink"
-msgstr "Зворотній канал"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "Ширина смуги пропускання зворотного каналу (кбіт/c)"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Налаштування Wondershaper"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper використовує формування трафіку для забезпечення низької "
-"затримки інтерактивного трафіку, навіть якщо ваше з'єднання з інтернетом "
-"дуже насичене."
diff --git a/applications/luci-app-wshaper/po/vi/wshaper.po b/applications/luci-app-wshaper/po/vi/wshaper.po
deleted file mode 100644 (file)
index e0b8e53..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-msgid ""
-msgstr ""
-"Plural-Forms: nplurals=1; plural=0;\n"
-"Project-Id-Version: LuCI\n"
-"POT-Creation-Date: \n"
-"PO-Revision-Date: \n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"MIME-Version: 1.0\n"
-"Content-Type: text/plain; charset=UTF-8\n"
-"Content-Transfer-Encoding: 8bit\n"
-"Language: vi\n"
-"X-Generator: Poedit 1.6.10\n"
-
-msgid "Downlink"
-msgstr ""
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Host or Network in CIDR notation."
-msgstr ""
-
-msgid "Interface"
-msgstr ""
-
-msgid "Low priority destination ports"
-msgstr ""
-
-msgid "Low priority hosts (Destination)"
-msgstr ""
-
-msgid "Low priority hosts (Source)"
-msgstr ""
-
-msgid "Low priority source ports"
-msgstr ""
-
-msgid "Uplink"
-msgstr ""
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr ""
-
-msgid "Wondershaper"
-msgstr ""
-
-msgid "Wondershaper settings"
-msgstr ""
-
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
diff --git a/applications/luci-app-wshaper/po/zh-cn/wshaper.po b/applications/luci-app-wshaper/po/zh-cn/wshaper.po
deleted file mode 100644 (file)
index a35ccd0..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-03 08:25+0200\n"
-"PO-Revision-Date: 2013-10-10 20:15+0200\n"
-"Last-Translator: Tanyingyu <Tanyingyu@163.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\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 "Downlink"
-msgstr "下载链接"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "下载带宽kbit/s"
-
-msgid "Host or Network in CIDR notation."
-msgstr "主机或网络的CIDR标记。"
-
-msgid "Interface"
-msgstr "端口"
-
-msgid "Low priority destination ports"
-msgstr "低优先级目标端口"
-
-msgid "Low priority hosts (Destination)"
-msgstr "低优先级目标主机"
-
-msgid "Low priority hosts (Source)"
-msgstr "低优先级源主机"
-
-msgid "Low priority source ports"
-msgstr "低优先级源端口"
-
-msgid "Uplink"
-msgstr "上联"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "上行带宽kbit/s"
-
-msgid "Wondershaper"
-msgstr "Wondershaper"
-
-msgid "Wondershaper settings"
-msgstr "Wondershaper设置"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"Wondershaper通过流量匹配,确保低延时的交互数据包,甚至当你的互联网连接是高度饱"
-"和。"
diff --git a/applications/luci-app-wshaper/po/zh-tw/wshaper.po b/applications/luci-app-wshaper/po/zh-tw/wshaper.po
deleted file mode 100644 (file)
index 1814825..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-msgid ""
-msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
-"PO-Revision-Date: 2014-05-14 12:40+0200\n"
-"Last-Translator: omnistack <omnistack@gmail.com>\n"
-"Language-Team: none\n"
-"Language: zh_TW\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 "Downlink"
-msgstr "下載"
-
-msgid "Downstream bandwidth in kbit/s"
-msgstr "以 kbit/s表示的下載頻寬"
-
-msgid "Host or Network in CIDR notation."
-msgstr "CIDR無類別域間路由中的主機或網路"
-
-msgid "Interface"
-msgstr "介面"
-
-msgid "Low priority destination ports"
-msgstr "低優先權目地埠號"
-
-msgid "Low priority hosts (Destination)"
-msgstr "低優先權主機(目的地)"
-
-msgid "Low priority hosts (Source)"
-msgstr "低優先權主機(來源)"
-
-msgid "Low priority source ports"
-msgstr "低優先權來源埠號"
-
-msgid "Uplink"
-msgstr "上傳"
-
-msgid "Upstream bandwidth in kbit/s"
-msgstr "以kbit/s表示的上傳頻寬"
-
-msgid "Wondershaper"
-msgstr "Wondershaper頻寬管理"
-
-msgid "Wondershaper settings"
-msgstr "Wondershaper設定值"
-
-#, fuzzy
-msgid ""
-"Wondershaper shapes traffic to ensure low latencies for interactive traffic "
-"even when your internet connection is highly saturated."
-msgstr ""
-"既使你的網路連線達到高飽和, Wondershaper採用流量銳化塑形以針對未知的流量保證"
-"低延遲"
diff --git a/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper b/applications/luci-app-wshaper/root/etc/uci-defaults/40_wshaper
deleted file mode 100644 (file)
index 918dff2..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-#!/bin/sh
-
-uci -q batch <<-EOF >/dev/null
-       delete ucitrack.@wshaper[-1]
-       set ucitrack.wshaper="wshaper"
-       set ucitrack.wshaper.exec='/etc/init.d/wshaper start'
-       commit ucitrack
-EOF
-
-rm -f /tmp/luci-indexcache
-exit 0
index d3f0403..1a0bee1 100755 (executable)
@@ -46,6 +46,34 @@ while( ! eof ZTAB ) {
 
 close ZTAB;
 
+# Add Etc/GMT zones from manually as they are not in zone.tab
+$TZ{"Etc/GMT"} = "GMT0";
+$TZ{"Etc/GMT-1"} = "<+01>-1";
+$TZ{"Etc/GMT-2"} = "<+02>-2";
+$TZ{"Etc/GMT-3"} = "<+03>-3";
+$TZ{"Etc/GMT-4"} = "<+04>-4";
+$TZ{"Etc/GMT-5"} = "<+05>-5";
+$TZ{"Etc/GMT-6"} = "<+06>-6";
+$TZ{"Etc/GMT-7"} = "<+07>-7";
+$TZ{"Etc/GMT-8"} = "<+08>-8";
+$TZ{"Etc/GMT-9"} = "<+09>-9";
+$TZ{"Etc/GMT-10"} = "<+10>-10";
+$TZ{"Etc/GMT-11"} = "<+11>-11";
+$TZ{"Etc/GMT-12"} = "<+12>-12";
+$TZ{"Etc/GMT-13"} = "<+13>-13";
+$TZ{"Etc/GMT-14"} = "<+14>-14";
+$TZ{"Etc/GMT+1"} = "<-01>1";
+$TZ{"Etc/GMT+2"} = "<-02>2";
+$TZ{"Etc/GMT+3"} = "<-03>3";
+$TZ{"Etc/GMT+4"} = "<-04>4";
+$TZ{"Etc/GMT+5"} = "<-05>5";
+$TZ{"Etc/GMT+6"} = "<-06>6";
+$TZ{"Etc/GMT+7"} = "<-07>7";
+$TZ{"Etc/GMT+8"} = "<-08>8";
+$TZ{"Etc/GMT+9"} = "<-09>9";
+$TZ{"Etc/GMT+10"} = "<-10>10";
+$TZ{"Etc/GMT+11"} = "<-11>11";
+$TZ{"Etc/GMT+12"} = "<-12>12";
 
 open(O, "> $tzdout/tzdata.lua") || die "open($tzdout/tzdata.lua): $!\n";
 
index b5f4b09..d1e752e 100644 (file)
@@ -11,10 +11,10 @@ LUCI_BASENAME:=ssl-openssl
 
 LUCI_TITLE:=LuCI with HTTPS support (OpenSSL as SSL backend)
 LUCI_DESCRIPTION:=LuCI with OpenSSL as the SSL backend (libustream-openssl). \
Note: px5g still requires libmbedtls (in LEDE) or libpolarssl (in Openwrt). \
- In LEDE it is also possible to replace px5g with openssl-util as uhttpd can \
- also generate keys with openssl commandline tools if px5g is not installed.
-LUCI_DEPENDS:=+luci +libustream-openssl +px5g
OpenSSL cmd tools (openssl-util) are used by uhttpd for SSL key generation \
+ instead of the default px5g. (If px5g is installed, uhttpd will prefer that.)
+
+LUCI_DEPENDS:=+luci +libustream-openssl +openssl-util
 
 include ../../luci.mk
 
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 c15624a..9bdb603 100644 (file)
@@ -1,19 +1,35 @@
 config 'community' 'profile'
        option 'name' 'Freifunk Potsdam'
        option 'homepage' 'http://potsdam.freifunk.net'
-       option 'ssid' 'www.freifunk-potsdam.de'
+       option 'ssid' 'Freifunk-Potsdam-XXX-YYY'
        option 'mesh_network' '10.22.0.0/16'
        option 'splash_network' '192.168.22.0/24'
        option 'splash_prefix' '24'
        option 'latitude' '52.39349'
        option 'longitude' '13.06489'
+       option 'ipv6' '0'
+
+config 'defaults' 'interface'
+       option 'netmask' '255.255.0.0'
+       option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168'
+       option 'delegate' '0'
 
 config 'defaults' 'wifi_device'
        option 'channel' '5'
 
+config 'defaults' 'wifi_device_5'
+       option 'channel' '44'
+
 config 'defaults' 'bssidscheme'
        option '5' '02:CA:FF:EE:BA:BE'
+       option '44' '02:CA:FF:EE:BA:BE'
 
-config 'defaults' 'interface'
-        option 'dns' '85.214.20.141 213.73.91.35 194.150.168.168'
+config 'defaults' 'ssidscheme'
+       option '5' 'Mesh23'
+       option '44' 'Mesh23'
+
+config 'defaults' 'dhcp'
+       option 'leasetime' '15m'
 
+config 'defaults' 'olsrd'
+       option 'LinkQualityAlgorithm' 'etx_ffeth'
index d9bbd99..2b9336f 100644 (file)
@@ -4,7 +4,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=freifunk-common
-PKG_RELEASE:=2
+PKG_RELEASE:=3
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
index 9a46f05..b1a2e41 100644 (file)
@@ -104,12 +104,6 @@ config 'defaults' 'wifi_iface'
        option 'bssid' '12:CA:FF:EE:BA:BE'
        option 'mcast_rate' '6000'
 
-config 'defaults' 'madwifi_wifi_iface'
-        option 'bgscan' '0'
-       option 'sw_merge' '1'
-        option 'probereq' '1'
-        option 'mcast_rate' '5500'
-
 config 'defaults' 'interface'
        option 'netmask' '255.255.0.0'
        option 'dns' '8.8.8.8 212.204.49.83 141.1.1.1'
index 9ac5a06..6298346 100644 (file)
@@ -4,7 +4,7 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=meshwizard
-PKG_RELEASE:=0.3.2
+PKG_RELEASE:=0.3.3
 
 PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
 
index e9139ed..f2d10cc 100755 (executable)
@@ -1,6 +1,6 @@
 #!/bin/sh
 # This script renames IB_wifi_ interface names into real interface names used on this system.
-# E.g. wireless.IB_wifi0 would become wireless.wifi0 on madwifi and wireless.radio0 on mac80211
+# E.g. wireless.IB_wifi0 would become wireless.radio0 on mac80211
 
 . $dir/functions.sh
 
index 01a9387..9ebcb46 100755 (executable)
@@ -73,7 +73,7 @@ setup_nameservice() {
 
        uci batch <<- EOF
                set $cfg.olsrd_nameservice=LoadPlugin
-               set $cfg.olsrd_nameservice.library="olsrd_nameservice.so.0.3"
+               set $cfg.olsrd_nameservice.library="olsrd_nameservice.so.0.4"
                set $cfg.olsrd_nameservice.latlon_file="$llfile"
                set $cfg.olsrd_nameservice.hosts_file="$hosts"
                set $cfg.olsrd_nameservice.sighup_pid_file="/var/run/dnsmasq.pid"
@@ -118,7 +118,7 @@ setup_jsoninfo() {
        proto="$1"
        uci batch <<- EOF
                set $cfg.olsrd_jsoninfo=LoadPlugin
-               set $cfg.olsrd_jsoninfo.library="olsrd_jsoninfo.so.0.0"
+               set $cfg.olsrd_jsoninfo.library="olsrd_jsoninfo.so.1.1"
        EOF
        if [ "$proto" = "6" ]; then
                uci set $cfg.olsrd_jsoninfo.ipv6only='1'
@@ -130,7 +130,7 @@ setup_txtinfo() {
        proto="$1"
        uci batch <<- EOF
            set $cfg.olsrd_txtinfo=LoadPlugin
-           set $cfg.olsrd_txtinfo.library="olsrd_txtinfo.so.0.1"
+           set $cfg.olsrd_txtinfo.library="olsrd_txtinfo.so.1.1"
        EOF
        if [ "$proto" = "6" ]; then
                uci set $cfg.olsrd_txtinfo.ipv6only='1'
index 41feb86..707b7b7 100755 (executable)
@@ -59,11 +59,6 @@ uci set wireless.$net\_iface=wifi-iface
 # create new wifi-iface for $net from defaults
 set_defaults "wifi_iface_" wireless.$net\_iface
 
-# overwrite some settings for type atheros (madwifi)
-if [ "$type" = "atheros" ]; then
-       set_defaults "madwifi_wifi_iface_" wireless.${net}
-fi
-
 # overwrite defaults
 bssid="$($dir/helpers/gen_bssid.sh $channel $community)"
 
index 0585ab5..7fdff3c 100755 (executable)
@@ -8,9 +8,7 @@ if [ -z "$dev" -o -z "$type" ]; then
        exit 1
 fi
 
-if [ "$type" = "atheros" ]; then
-        exit 0
-elif [ "$type" = "mac80211" ]; then
+if [ "$type" = "mac80211" ]; then
        # not hostapd[-mini], no VAP
        if [ ! -x /usr/sbin/hostapd ]; then
                echo "WARNING: hostapd[-mini] is required to be able to use VAP with mac80211."
diff --git a/contrib/package/remote-update/Makefile b/contrib/package/remote-update/Makefile
deleted file mode 100644 (file)
index 4f8b3a5..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-#
-# Copyright (C) 2009 Jo-Philipp Wich <jow@openwrt.org>
-#
-# This is free software, licensed under the Apache 2.0 license.
-#
-
-include $(TOPDIR)/rules.mk
-
-PKG_NAME:=remote-update
-PKG_RELEASE:=4
-
-PKG_BUILD_DIR := $(BUILD_DIR)/$(PKG_NAME)
-
-include $(INCLUDE_DIR)/package.mk
-
-define Package/remote-update
-  SECTION:=luci
-  CATEGORY:=LuCI
-  SUBMENU:=9. Freifunk
-  TITLE:=Freifunk remote update utility.
-  DEPENDS:=@TARGET_atheros||@TARGET_ar71xx||@TARGET_brcm_2_4
-endef
-
-define Package/remote-update/description
-  The freifunk remote-update utility uses sysupgrade to reflash the currently 
-  running firmware while keeping most of the existing configuratio.
-endef
-
-define Build/Prepare
-       mkdir -p $(PKG_BUILD_DIR)
-endef
-
-define Build/Configure
-endef
-
-define Build/Compile
-endef
-
-define Package/remote-update/install
-       $(CP) ./files/* $(1)/
-endef
-
-$(eval $(call BuildPackage,remote-update))
diff --git a/contrib/package/remote-update/files/usr/sbin/remote-update b/contrib/package/remote-update/files/usr/sbin/remote-update
deleted file mode 100755 (executable)
index 6e45e48..0000000
+++ /dev/null
@@ -1,306 +0,0 @@
-#!/bin/sh
-
-local tempfile=/tmp/remote-upgrade.img
-local D2='\([0-9]\{2\}\)'
-local D4='\([0-9]\{4\}\)'
-local NL='
-'
-
-find_architecture()
-{
-       local ifs="$IFS"; IFS="-"
-       set -- $(opkg list_installed kernel)
-       IFS="$ifs"
-
-       echo "$3"
-}
-
-find_image()
-{
-       case "$1" in
-               atheros)
-                       echo "openwrt-atheros-combined.squashfs.img"
-               ;;
-               ar71xx)
-                       echo "openwrt-ar71xx-combined.squashfs.img"
-               ;;
-               brcm)
-                       echo "openwrt-brcm-2.4-squashfs.trx"
-               ;;
-       esac
-}
-
-check_image()
-{
-       local file; for file in /lib/upgrade/*.sh; do . $file; done
-       if platform_check_image "$1" >/dev/null 2>/dev/null; then
-               return 0
-       fi
-       return 1
-}
-
-find_remote_checksum()
-{
-       wget -qO- ${1%/*}/md5sums 2>/dev/null | \
-               sed -ne '/'$2'/ { s/ .*//p }'
-}
-
-find_local_checksum()
-{
-       set -- $(md5sum "$tempfile")
-       echo $1
-}
-
-find_remote_info()
-{
-       wget -qO- "${1%/*}/VERSION.txt" 2>/dev/null
-}
-
-find_remote_version()
-{
-       find_remote_info "$1" | \
-               sed -ne "s!.*$D4/$D2/$D2 $D2:$D2.*!\\1\\2\\3\\4\\5!p;t"
-}
-
-find_local_version()
-{
-       if [ -f /rom/etc/banner ]; then
-               sed -ne "s!.*$D4/$D2/$D2 $D2:$D2.*!\\1\\2\\3\\4\\5!p;t" \
-                       /rom/etc/banner
-       else
-               date +"%Y%m%d%H%M" -r /bin/sh
-       fi
-}
-
-stop_service()
-{
-       [ -x /etc/init.d/$1 ] && {
-               echo -n "Stopping service $1 ... "
-               /etc/init.d/$1 stop >/dev/null 2>/dev/null
-               echo "done"
-       }
-}
-
-do_wait()
-{
-       if [ ${1:-0} -gt 0 ]; then
-               echo -n "${2:-Waiting} "
-               for i in $(seq 1 $1); do
-                       printf "%-2dseconds" $(($1-$i))
-                       sleep 1
-                       echo -en "\b\b\b\b\b\b\b\b\b"
-               done
-               echo "${NL}"
-       fi
-}
-
-version_compare()
-{
-       local v1="$1"
-       local v2="$2"
-
-       while [ -n "$v1" -o -n "$v2" ]; do
-               if [ -z "${v2:0:4}" -o "${v1:0:4}" -gt "${v2:0:4}" ]; then
-                       return 1
-               elif [ -z "${v1:0:4}" -o "${v1:0:4}" -lt "${v2:0:4}" ]; then
-                       return 2
-               fi
-
-               v1="${v1:4}"
-               v2="${v2:4}"
-       done
-
-       return 0
-}
-
-usage()
-{
-       cat <<EOT
-
-Usage:
-  remote-update -h
-  remote-update [-u <update url>] -c
-  remote-update [-v] [-y] [-u <update url>] -w
-  remote-update [-d] [-n] [-v] [-y] [-s <sleep seconds>] [-u <update url>]
-
-Actions:
-  -h    Display this help message and exit.
-  -c    Check for firmware update and exit.
-  -w    Fetch image and exit, do not perform flash write.
-
-Options:
-  -d    Do not detach from terminal.
-  -n    Do not backup configuration.
-  -v    Skip verification of downloaded image.
-  -y    Assume defaults for all questions.
-
-  -s <seconds>
-    Sleep given amount of seconds before starting flash write.
-    If ommitted and '-y' is not used, 5 seconds are assumed.
-
-  -u <url>
-    Fetch firmware image from given url. A file "md5sums" is expected
-    in the same remote directory. If there is no such file, use -v to
-    suppress verification.
-
-EOT
-
-       exit 1
-}
-
-
-while getopts "s:u:cdnvwyh" flag; do
-       case $flag in
-               s) sleeptime="$OPTARG";;
-               u) updateurl="$OPTARG";;
-               c) checkupdate=1;;
-               d) nodetach=1;;
-               n) nobackup=1;;
-               v) noverify=1;;
-               w) noflash=1;;
-               y) noquestions=1;;
-               *) usage;;
-       esac
-done
-
-
-local image_url="$updateurl"
-local image_name="${image_url##*/}"
-
-[ -z "$image_url" ] && {
-       local arch=$(find_architecture)
-       local image=$(find_image "$arch")
-       local repo=$(uci get freifunk.upgrade.repository 2>/dev/null)
-       repo=${repo:-$(uci get system.upgrade.repository 2>/dev/null)}
-
-       [ -z "$arch" ] && {
-               echo "Can not determine the current architecture."
-               exit 1
-       }
-
-       [ -z "$repo" ] && {
-               echo "No repository configured in 'system.upgrade.repository'."
-               echo "Use the '-u' flag to specify an image location."
-               exit 1
-       }
-
-       [ -z "$image" ] && {
-               echo "No suitable image for the '$arch' architecture."
-               echo "Your platform is not supported."
-               exit 1
-       }
-
-       echo "Architecture: $arch"
-       echo "Repository:   $repo"
-
-       image_name="$image"
-       image_url="${repo%/}/$arch/$image"
-}
-
-
-if [ "$checkupdate" = 1 ]; then
-       local v1=$(find_local_version)
-       local v2=$(find_remote_version "$image_url")
-
-       [ -n "$v1" -a -n "$v2" ] && {
-               version_compare "$v1" "$v2"
-               [ $? == 2 ] && {
-                       echo "Update available!${NL}Local:  $v1${NL}Remote: $v2${NL}--"
-                       find_remote_info "$image_url"
-                       exit 0
-               } || {
-                       echo "Local version $v1 is up to date"
-                       exit 2
-               }
-       } || {
-               echo "No remote time stamp found."
-               exit 1
-       }
-else
-       if [ "$noquestions" != 1 ]; then
-               echo -n "${NL}About to download $image_name. Continue? [y] "
-               read answer
-               case "$answer" in
-                       [nN]) exit 1;;
-               esac
-       fi
-
-       echo -n "Downloading $image_name ... "
-       rm -f $tempfile
-       wget -qO $tempfile "$image_url" 2>/dev/null
-       [ $? == 0 ] && echo done || {
-               echo failed
-               rm -f $tempfile
-               exit 1
-       }
-
-       if [ "$noverify" != 1 ]; then
-               echo -n "Verifying $image_name ... "
-
-               local md5_remote=$(find_remote_checksum "$image_url" "$image_name")
-               local md5_local=$(find_local_checksum)
-
-               check_image "$tempfile"
-               local image_ok=$?
-
-               if [ $image_ok = 0 -a -n "$md5_remote" -a -n "$md5_local" -a "$md5_remote" = "$md5_local" ]; then
-                       echo "done"
-               else
-                       if [ $image_ok != 0 ]; then
-                               echo "unsupported image type"
-                       else
-                               echo "checksum mismatch! (local:${md5_local:-(none)} remote:${md5_remote:-(none)})"
-                       fi
-
-                       local answer=n
-                       if [ "$noquestions" != 1 ]; then
-                               echo -n "${NL}Verification failed. Continue anyway? [n] "
-                               read answer
-                       fi
-
-                       case "$answer" in
-                               [yYjJ]*) : ;;
-                               *)
-                                       echo "Aborting."
-                                       rm -f $tempfile
-                                       exit 1
-                               ;;
-                       esac
-               fi
-       fi
-
-       if [ "$noflash" != 1 ]; then
-               if [ -f "$tempfile" ]; then
-                       if [ "$noquestions" == 1 ]; then
-                               do_wait ${sleeptime:-5} "${NL}About to start flashing, hit <Ctrl-C> to abort!${NL}${NL}Starting in"
-                       else
-                               if [ -z "$nobackup" ]; then
-                                       echo -n "${NL}Keep configuration files? [y] "
-                                       read answer
-                                       case "$answer" in
-                                               [nN]) nobackup=1;;
-                                       esac
-                               fi
-
-                               echo -n "${NL}About to start flashing!${NL}Hit <Enter> to continue or <Ctrl-C> to abort.${NL}"
-                               read answer
-                       fi
-
-                       for s in lucid collectd; do stop_service $s; done
-
-                       if [ "$nodetach" != 1 ]; then
-                               echo -n "Starting sysupgrade in background ... "
-                               /bin/busybox start-stop-daemon -S -b -x /sbin/sysupgrade -- ${nobackup:+-n} "$tempfile"
-                               echo "done"
-                       else
-                               echo "Executing sysupgrade ... "
-                               exec /sbin/sysupgrade ${nobackup:+-n} "$tempfile"
-                       fi
-               else
-                       echo "No upgrade image found!"
-                       exit 1
-               fi
-       else
-               echo "Image saved in '$tempfile'"
-       fi
-fi
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 12ca111..ba184ed 100644 (file)
@@ -355,7 +355,7 @@ static int nixio_stat(lua_State *L) {
 
 static int nixio_lstat(lua_State *L) {
        nixio_stat_t buf;
-       if (stat(luaL_checkstring(L, 1), &buf)) {
+       if (lstat(luaL_checkstring(L, 1), &buf)) {
                return nixio__perror(L);
        } else {
                nixio__push_stat(L, &buf);
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;
+};
diff --git a/luci.mk b/luci.mk
index 69aecaa..0b2ec4e 100644 (file)
--- a/luci.mk
+++ b/luci.mk
@@ -7,7 +7,7 @@
 LUCI_NAME?=$(notdir ${CURDIR})
 LUCI_TYPE?=$(word 2,$(subst -, ,$(LUCI_NAME)))
 LUCI_BASENAME?=$(patsubst luci-$(LUCI_TYPE)-%,%,$(LUCI_NAME))
-LUCI_LANGUAGES:=$(filter-out templates,$(notdir $(wildcard ${CURDIR}/po/*)))
+LUCI_LANGUAGES:=$(sort $(filter-out templates,$(notdir $(wildcard ${CURDIR}/po/*))))
 LUCI_DEFAULTS:=$(notdir $(wildcard ${CURDIR}/root/etc/uci-defaults/*))
 LUCI_PKGARCH?=$(if $(realpath src/Makefile),,all)
 
@@ -36,7 +36,7 @@ LUCI_LANG.sv=Svenska (Swedish)
 LUCI_LANG.tr=Türkçe (Turkish)
 LUCI_LANG.uk=украї́нська (Ukrainian)
 LUCI_LANG.vi=Tiếng Việt (Vietnamese)
-LUCI_LANG.zh-cn=普通话 (Chinese)
+LUCI_LANG.zh-cn=中文 (Chinese)
 LUCI_LANG.zh-tw=臺灣華語 (Taiwanese)
 
 # Submenu titles
@@ -56,7 +56,7 @@ PKG_VERSION?=$(if $(DUMP),x,$(strip $(shell \
        elif git log -1 >/dev/null 2>/dev/null; then \
                revision="svn-r$$(LC_ALL=C git log -1 | sed -ne 's/.*git-svn-id: .*@\([0-9]\+\) .*/\1/p')"; \
                if [ "$$revision" = "svn-r" ]; then \
-                       set -- $$(git log -1 --format="%ct %h"); \
+                       set -- $$(git log -1 --format="%ct %h" --abbrev=7); \
                        secs="$$(($$1 % 86400))"; \
                        yday="$$(date --utc --date="@$$1" "+%y.%j")"; \
                        revision="$$(printf 'git-%s.%05d-%s' "$$yday" "$$secs" "$$2")"; \
@@ -70,7 +70,8 @@ PKG_VERSION?=$(if $(DUMP),x,$(strip $(shell \
 PKG_GITBRANCH?=$(if $(DUMP),x,$(strip $(shell \
        variant="LuCI"; \
        if git log -1 >/dev/null 2>/dev/null; then \
-               branch="$$(git symbolic-ref --short -q HEAD 2>/dev/null)"; \
+               branch="$$(git branch --remote --verbose --no-abbrev --contains 2>/dev/null | \
+                       sed -rne 's|^[^/]+/([^ ]+) [a-f0-9]{40} .+$$|\1|p' | head -n1)"; \
                if [ "$$branch" != "master" ]; then \
                        variant="LuCI $$branch branch"; \
                else \
index 753ff25..6393195 100644 (file)
@@ -16,7 +16,8 @@ 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_HASH:=ed7680f2896269ae8633756e7edcf09050812f78c8f49e280e63c30d14f35aea
+PKG_LICENSE:=Apache-2.0
 
 HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/LuaSrcDiet-0.12.1
 
@@ -25,6 +26,7 @@ include $(INCLUDE_DIR)/host-build.mk
 define Package/luci-base/conffiles
 /etc/luci-uploads
 /etc/config/luci
+/etc/config/ucitrack
 endef
 
 include ../../luci.mk
index 8e66cbc..b334703 100644 (file)
@@ -118,48 +118,88 @@ var cbi_validators = {
                return false;
        },
 
-       'ipmask': function()
+       'ip4prefix': function()
        {
-               return cbi_validators.ipmask4.apply(this) ||
-                       cbi_validators.ipmask6.apply(this);
+               return !isNaN(this) && this >= 0 && this <= 32;
        },
 
-       'ipmask4': function()
+       'ip6prefix': function()
        {
-               var ip = this, mask = 32;
+               return !isNaN(this) && this >= 0 && this <= 128;
+       },
 
-               if (ip.match(/^(\S+)\/(\S+)$/))
+       'cidr': function()
+       {
+               return cbi_validators.cidr4.apply(this) ||
+                       cbi_validators.cidr6.apply(this);
+       },
+
+       'cidr4': function()
+       {
+               if (this.match(/^(\S+)\/(\S+)$/))
                {
                        ip = RegExp.$1;
                        mask = RegExp.$2;
+                       return cbi_validators.ip4addr.apply(ip) &&
+                               cbi_validators.ip4prefix.apply(mask);
                }
+               return false;
+       },
 
-               if (!isNaN(mask) && (mask < 0 || mask > 32))
-                       return false;
-
-               if (isNaN(mask) && !cbi_validators.ip4addr.apply(mask))
-                       return false;
-
-               return cbi_validators.ip4addr.apply(ip);
+       'cidr6': function()
+       {
+               if (this.match(/^(\S+)\/(\S+)$/))
+               {
+                       ip = RegExp.$1;
+                       mask = RegExp.$2;
+                       return cbi_validators.ip6addr.apply(ip) &&
+                               cbi_validators.ip6prefix.apply(mask);
+               }
+               return false;
        },
 
-       'ipmask6': function()
+       'ipnet4': function()
        {
-               var ip = this, mask = 128;
+               if (this.match(/^(\S+)\/(\S+)$/))
+               {
+                       ip = RegExp.$1;
+                       net = RegExp.$2;
+                       return cbi_validators.ip4addr.apply(ip) &&
+                               cbi_validators.ip4addr.apply(net);
+               }
+               return false;
+       },
 
-               if (ip.match(/^(\S+)\/(\S+)$/))
+       'ipnet6': function()
+       {
+               if (this.match(/^(\S+)\/(\S+)$/))
                {
                        ip = RegExp.$1;
-                       mask = RegExp.$2;
+                       net = RegExp.$2;
+                       return cbi_validators.ip6addr.apply(ip) &&
+                               cbi_validators.ip6addr.apply(net);
                }
+               return false;
+       },
 
-               if (!isNaN(mask) && (mask < 0 || mask > 128))
-                       return false;
+       'ipmask': function()
+       {
+               return cbi_validators.ipmask4.apply(this) ||
+                       cbi_validators.ipmask6.apply(this);
+       },
 
-               if (isNaN(mask) && !cbi_validators.ip6addr.apply(mask))
-                       return false;
+       'ipmask4': function()
+       {
+               return cbi_validators.cidr4.apply(this) ||
+                       cbi_validators.ipnet4.apply(this) ||
+                       cbi_validators.ip4addr.apply(this);
+       },
 
-               return cbi_validators.ip6addr.apply(ip);
+       'ipmask6': function()
+       {
+               return cbi_validators.cidr6.apply(this) ||
+                       cbi_validators.ipnet6.apply(this) ||
+                       cbi_validators.ip6addr.apply(this);
        },
 
        'port': function()
@@ -189,7 +229,7 @@ var cbi_validators = {
        {
                return cbi_validators.hostname.apply(this) ||
                        ((ipv4only != 1) && cbi_validators.ipaddr.apply(this)) ||
-                       ((ipv4only == 1) && cb_validators.ip4addr.apply(this));
+                       ((ipv4only == 1) && cbi_validators.ip4addr.apply(this));
        },
 
        'hostname': function()
@@ -481,8 +521,9 @@ function cbi_d_check(deps) {
                                istat = (istat && cbi_d_checkvalue(j, deps[i][j]))
                        }
                }
-               if (istat) {
-                       return !reverse;
+
+               if (istat ^ reverse) {
+                       return true;
                }
        }
        return def;
@@ -648,9 +689,6 @@ function cbi_combobox(id, values, def, man, focus) {
        var dt = obj.getAttribute('cbi_datatype');
        var op = obj.getAttribute('cbi_optional');
 
-       if (dt)
-               cbi_validate_field(sel, op == 'true', dt);
-
        if (!values[obj.value]) {
                if (obj.value == "") {
                        var optdef = document.createElement("option");
@@ -685,6 +723,9 @@ function cbi_combobox(id, values, def, man, focus) {
 
        obj.style.display = "none";
 
+       if (dt)
+               cbi_validate_field(sel, op == 'true', dt);
+
        cbi_bind(sel, "change", function() {
                if (sel.selectedIndex == sel.options.length - 1) {
                        obj.style.display = "inline";
@@ -727,7 +768,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 +779,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 +846,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 701c12a..3385f8f 100644 (file)
@@ -91,8 +91,6 @@ XHR = function()
 
                xhr.open('POST', url, true);
                xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
-               xhr.setRequestHeader('Content-length', code.length);
-               xhr.setRequestHeader('Connection', 'close');
                xhr.send(code);
        }
 
index 98f6a44..df23aaf 100644 (file)
@@ -1,4 +1,5 @@
 -- Copyright 2010 Jo-Philipp Wich <jow@openwrt.org>
+-- Copyright 2017 Dan Luedtke <mail@danrl.com>
 -- Licensed to the public under the Apache License 2.0.
 
 local fs = require "nixio.fs"
@@ -131,38 +132,48 @@ function ip6prefix(val)
        return ( val and val >= 0 and val <= 128 )
 end
 
-function ipmask(val)
-       return ipmask4(val) or ipmask6(val)
+function cidr4(val)
+       local ip, mask = val:match("^([^/]+)/([^/]+)$")
+
+       return ip4addr(ip) and ip4prefix(mask)
 end
 
-function ipmask4(val)
+function cidr6(val)
        local ip, mask = val:match("^([^/]+)/([^/]+)$")
-       local bits = tonumber(mask)
 
-       if bits and (bits < 0 or bits > 32) then
-               return false
-       end
+       return ip6addr(ip) and ip6prefix(mask)
+end
 
-       if not bits and not ip4addr(mask) then
-               return false
-       end
+function ipnet4(val)
+       local ip, mask = val:match("^([^/]+)/([^/]+)$")
 
-       return ip4addr(ip or val)
+       return ip4addr(ip) and ip4addr(mask)
 end
 
-function ipmask6(val)
+function ipnet6(val)
        local ip, mask = val:match("^([^/]+)/([^/]+)$")
-       local bits = tonumber(mask)
 
-       if bits and (bits < 0 or bits > 128) then
-               return false
-       end
+       return ip6addr(ip) and ip6addr(mask)
+end
 
-       if not bits and not ip6addr(mask) then
-               return false
+function ipmask(val)
+       return ipmask4(val) or ipmask6(val)
+end
+
+function ipmask4(val)
+       return cidr4(val) or ipnet4(val) or ip4addr(val)
+end
+
+function ipmask6(val)
+       return cidr6(val) or ipnet6(val) or ip6addr(val)
+end
+
+function ip6hostid(val)
+       if val and val:match("^[a-fA-F0-9:]+$") and (#val > 2) then
+               return (ip6addr("2001:db8:0:0" .. val) or ip6addr("2001:db8:0:0:" .. val))
        end
 
-       return ip6addr(ip or val)
+       return false
 end
 
 function port(val)
@@ -267,11 +278,33 @@ function wepkey(val)
        end
 end
 
+function hexstring(val)
+       if val then
+               return (val:match("^[a-fA-F0-9]+$") ~= nil)
+       end
+       return false
+end
+
+function hex(val, maxbytes)
+       maxbytes = tonumber(maxbytes)
+       if val and maxbytes ~= nil then
+               return ((val:match("^0x[a-fA-F0-9]+$") ~= nil) and (#val <= 2 + maxbytes * 2))
+       end
+       return false
+end
+
+function base64(val)
+       if val then
+               return (val:match("^[a-zA-Z0-9/+]+=?=?$") ~= nil) and (math.fmod(#val, 4) == 0)
+       end
+       return false
+end
+
 function string(val)
        return true             -- Everything qualifies as valid string
 end
 
-function directory( val, seen )
+function directory(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -287,7 +320,7 @@ function directory( val, seen )
        return false
 end
 
-function file( val, seen )
+function file(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -303,7 +336,7 @@ function file( val, seen )
        return false
 end
 
-function device( val, seen )
+function device(val, seen)
        local s = fs.stat(val)
        seen = seen or { }
 
@@ -438,4 +471,3 @@ function dateyyyymmdd(val)
        end
        return false
 end
-
index 0876ce6..e4f77f1 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)
-       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("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
@@ -201,10 +219,19 @@ function dispatch(request)
        local lang = conf.main.lang or "auto"
        if lang == "auto" then
                local aclang = http.getenv("HTTP_ACCEPT_LANGUAGE") or ""
-               for lpat in aclang:gmatch("[%w-]+") do
-                       lpat = lpat and lpat:gsub("-", "_")
-                       if conf.languages[lpat] then
-                               lang = lpat
+               for aclang in aclang:gmatch("[%w_-]+") do
+                       local country, culture = aclang:match("^([a-z][a-z])[_-]([a-zA-Z][a-zA-Z])$")
+                       if country and culture then
+                               local cc = "%s_%s" %{ country, culture:lower() }
+                               if conf.languages[cc] then
+                                       lang = cc
+                                       break
+                               elseif conf.languages[country] then
+                                       lang = country
+                                       break
+                               end
+                       elseif conf.languages[aclang] then
+                               lang = aclang
                                break
                        end
                end
@@ -332,74 +359,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)
-                               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 8795dfc..9cc9857 100644 (file)
@@ -224,7 +224,15 @@ function write(content, src_err)
                                header("Cache-Control", "no-cache")
                                header("Expires", "0")
                        end
-
+                       if not context.headers["x-frame-options"] then
+                               header("X-Frame-Options", "SAMEORIGIN")
+                       end
+                       if not context.headers["x-xss-protection"] then
+                               header("X-XSS-Protection", "1; mode=block")
+                       end
+                       if not context.headers["x-content-type-options"] then
+                               header("X-Content-Type-Options", "nosniff")
+                       end
 
                        context.eoh = true
                        coroutine.yield(3)
index 061c6ad..0a8b2fb 100644 (file)
@@ -264,7 +264,7 @@ function header_source( sock )
 end
 
 -- Content-Type. Stores all extracted data associated with its parameter name
--- in the params table withing the given message object. Multiple parameter
+-- in the params table within the given message object. Multiple parameter
 -- values are stored as tables, ordinary ones as strings.
 -- If an optional file callback function is given then it is feeded with the
 -- file contents chunk by chunk and only the extracted file name is stored
@@ -433,7 +433,7 @@ function mimedecode_message_body( src, msg, filecb )
 end
 
 -- Content-Type. Stores all extracted data associated with its parameter name
--- in the params table withing the given message object. Multiple parameter
+-- in the params table within the given message object. Multiple parameter
 -- values are stored as tables, ordinary ones as strings.
 function urldecode_message_body( src, msg )
 
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 5573a9b..feff085 100644 (file)
@@ -498,11 +498,13 @@ function forwarding.dest(self)
 end
 
 function forwarding.src_zone(self)
-       return zone(self:src())
+       local z = zone(self:src())
+       return z.sid and z
 end
 
 function forwarding.dest_zone(self)
-       return zone(self:dest())
+       local z = zone(self:dest())
+       return z.sid and z
 end
 
 
index 2d8336b..d9ef408 100644 (file)
@@ -950,6 +950,13 @@ function protocol.dns6addrs(self)
        return dns
 end
 
+function protocol.ip6prefix(self)
+       local prefix = self:_ubus("ipv6-prefix")
+       if prefix and #prefix > 0 then
+               return "%s/%d" %{ prefix[1].address, prefix[1].mask }
+       end
+end
+
 function protocol.is_bridge(self)
        return (not self:is_virtual() and self:type() == "bridge")
 end
@@ -1355,8 +1362,6 @@ function wifidev.get_i18n(self)
        local t = "Generic"
        if self.iwinfo.type == "wl" then
                t = "Broadcom"
-       elseif self.iwinfo.type == "madwifi" then
-               t = "Atheros"
        end
 
        local m = ""
index a972717..115c54d 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
@@ -369,8 +348,10 @@ end
 
 function net.devices()
        local devs = {}
+       local seen = {}
        for k, v in ipairs(nixio.getifaddrs()) do
-               if v.family == "packet" then
+               if v.name and not seen[v.name] then
+                       seen[v.name] = true
                        devs[#devs+1] = v.name
                end
        end
@@ -378,145 +359,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 465d7df..419c191 100644 (file)
@@ -59,42 +59,42 @@ TZ = {
        { 'America/Anchorage', 'AKST9AKDT,M3.2.0,M11.1.0' },
        { 'America/Anguilla', 'AST4' },
        { 'America/Antigua', 'AST4' },
-       { 'America/Araguaina', 'BRT3' },
-       { 'America/Argentina/Buenos Aires', 'ART3' },
-       { 'America/Argentina/Catamarca', 'ART3' },
-       { 'America/Argentina/Cordoba', 'ART3' },
-       { 'America/Argentina/Jujuy', 'ART3' },
-       { 'America/Argentina/La Rioja', 'ART3' },
-       { 'America/Argentina/Mendoza', 'ART3' },
-       { 'America/Argentina/Rio Gallegos', 'ART3' },
-       { 'America/Argentina/Salta', 'ART3' },
-       { 'America/Argentina/San Juan', 'ART3' },
-       { 'America/Argentina/San Luis', 'ART3' },
-       { 'America/Argentina/Tucuman', 'ART3' },
-       { 'America/Argentina/Ushuaia', 'ART3' },
+       { 'America/Araguaina', '<-03>3' },
+       { 'America/Argentina/Buenos Aires', '<-03>3' },
+       { 'America/Argentina/Catamarca', '<-03>3' },
+       { 'America/Argentina/Cordoba', '<-03>3' },
+       { 'America/Argentina/Jujuy', '<-03>3' },
+       { 'America/Argentina/La Rioja', '<-03>3' },
+       { 'America/Argentina/Mendoza', '<-03>3' },
+       { 'America/Argentina/Rio Gallegos', '<-03>3' },
+       { 'America/Argentina/Salta', '<-03>3' },
+       { 'America/Argentina/San Juan', '<-03>3' },
+       { 'America/Argentina/San Luis', '<-03>3' },
+       { 'America/Argentina/Tucuman', '<-03>3' },
+       { 'America/Argentina/Ushuaia', '<-03>3' },
        { 'America/Aruba', 'AST4' },
-       { 'America/Asuncion', 'PYT4PYST,M10.1.0/0,M3.4.0/0' },
+       { 'America/Asuncion', '<-04>4<-03>,M10.1.0/0,M3.4.0/0' },
        { 'America/Atikokan', 'EST5' },
-       { 'America/Bahia', 'BRT3' },
+       { 'America/Bahia', '<-03>3' },
        { 'America/Bahia Banderas', 'CST6CDT,M4.1.0,M10.5.0' },
        { 'America/Barbados', 'AST4' },
-       { 'America/Belem', 'BRT3' },
+       { 'America/Belem', '<-03>3' },
        { 'America/Belize', 'CST6' },
        { 'America/Blanc-Sablon', 'AST4' },
-       { 'America/Boa Vista', 'AMT4' },
-       { 'America/Bogota', 'COT5' },
+       { 'America/Boa Vista', '<-04>4' },
+       { 'America/Bogota', '<-05>5' },
        { 'America/Boise', 'MST7MDT,M3.2.0,M11.1.0' },
        { 'America/Cambridge Bay', 'MST7MDT,M3.2.0,M11.1.0' },
-       { 'America/Campo Grande', 'AMT4AMST,M10.3.0/0,M2.3.0/0' },
+       { 'America/Campo Grande', '<-04>4<-03>,M10.3.0/0,M2.3.0/0' },
        { 'America/Cancun', 'EST5' },
-       { 'America/Caracas', 'VET4' },
-       { 'America/Cayenne', 'GFT3' },
+       { 'America/Caracas', '<-04>4' },
+       { 'America/Cayenne', '<-03>3' },
        { 'America/Cayman', 'EST5' },
        { 'America/Chicago', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/Chihuahua', 'MST7MDT,M4.1.0,M10.5.0' },
        { 'America/Costa Rica', 'CST6' },
        { 'America/Creston', 'MST7' },
-       { 'America/Cuiaba', 'AMT4AMST,M10.3.0/0,M2.3.0/0' },
+       { 'America/Cuiaba', '<-04>4<-03>,M10.3.0/0,M2.3.0/0' },
        { 'America/Curacao', 'AST4' },
        { 'America/Danmarkshavn', 'GMT0' },
        { 'America/Dawson', 'PST8PDT,M3.2.0,M11.1.0' },
@@ -103,19 +103,19 @@ TZ = {
        { 'America/Detroit', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/Dominica', 'AST4' },
        { 'America/Edmonton', 'MST7MDT,M3.2.0,M11.1.0' },
-       { 'America/Eirunepe', 'ACT5' },
+       { 'America/Eirunepe', '<-05>5' },
        { 'America/El Salvador', 'CST6' },
        { 'America/Fort Nelson', 'MST7' },
-       { 'America/Fortaleza', 'BRT3' },
+       { 'America/Fortaleza', '<-03>3' },
        { 'America/Glace Bay', 'AST4ADT,M3.2.0,M11.1.0' },
-       { 'America/Godthab', 'WGT3WGST,M3.5.0/-2,M10.5.0/-1' },
+       { 'America/Godthab', '<-03>3<-02>,M3.5.0/-2,M10.5.0/-1' },
        { 'America/Goose Bay', 'AST4ADT,M3.2.0,M11.1.0' },
        { 'America/Grand Turk', 'AST4' },
        { 'America/Grenada', 'AST4' },
        { 'America/Guadeloupe', 'AST4' },
        { 'America/Guatemala', 'CST6' },
-       { 'America/Guayaquil', 'ECT5' },
-       { 'America/Guyana', 'GYT4' },
+       { 'America/Guayaquil', '<-05>5' },
+       { 'America/Guyana', '<-04>4' },
        { 'America/Halifax', 'AST4ADT,M3.2.0,M11.1.0' },
        { 'America/Havana', 'CST5CDT,M3.2.0/0,M11.1.0/1' },
        { 'America/Hermosillo', 'MST7' },
@@ -134,13 +134,13 @@ TZ = {
        { 'America/Kentucky/Louisville', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/Kentucky/Monticello', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/Kralendijk', 'AST4' },
-       { 'America/La Paz', 'BOT4' },
-       { 'America/Lima', 'PET5' },
+       { 'America/La Paz', '<-04>4' },
+       { 'America/Lima', '<-05>5' },
        { 'America/Los Angeles', 'PST8PDT,M3.2.0,M11.1.0' },
        { 'America/Lower Princes', 'AST4' },
-       { 'America/Maceio', 'BRT3' },
+       { 'America/Maceio', '<-03>3' },
        { 'America/Managua', 'CST6' },
-       { 'America/Manaus', 'AMT4' },
+       { 'America/Manaus', '<-04>4' },
        { 'America/Marigot', 'AST4' },
        { 'America/Martinique', 'AST4' },
        { 'America/Matamoros', 'CST6CDT,M3.2.0,M11.1.0' },
@@ -149,39 +149,40 @@ TZ = {
        { 'America/Merida', 'CST6CDT,M4.1.0,M10.5.0' },
        { 'America/Metlakatla', 'AKST9AKDT,M3.2.0,M11.1.0' },
        { 'America/Mexico City', 'CST6CDT,M4.1.0,M10.5.0' },
-       { 'America/Miquelon', 'PMST3PMDT,M3.2.0,M11.1.0' },
+       { 'America/Miquelon', '<-03>3<-02>,M3.2.0,M11.1.0' },
        { 'America/Moncton', 'AST4ADT,M3.2.0,M11.1.0' },
        { 'America/Monterrey', 'CST6CDT,M4.1.0,M10.5.0' },
-       { 'America/Montevideo', 'UYT3' },
+       { 'America/Montevideo', '<-03>3' },
        { 'America/Montserrat', 'AST4' },
        { 'America/Nassau', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/New York', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/Nipigon', 'EST5EDT,M3.2.0,M11.1.0' },
        { 'America/Nome', 'AKST9AKDT,M3.2.0,M11.1.0' },
-       { 'America/Noronha', 'FNT2' },
+       { 'America/Noronha', '<-02>2' },
        { 'America/North Dakota/Beulah', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/North Dakota/Center', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/North Dakota/New Salem', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/Ojinaga', 'MST7MDT,M3.2.0,M11.1.0' },
        { 'America/Panama', 'EST5' },
        { 'America/Pangnirtung', 'EST5EDT,M3.2.0,M11.1.0' },
-       { 'America/Paramaribo', 'SRT3' },
+       { 'America/Paramaribo', '<-03>3' },
        { 'America/Phoenix', 'MST7' },
        { 'America/Port of Spain', 'AST4' },
-       { 'America/Port-au-Prince', 'EST5' },
-       { 'America/Porto Velho', 'AMT4' },
+       { 'America/Port-au-Prince', 'EST5EDT,M3.2.0,M11.1.0' },
+       { 'America/Porto Velho', '<-04>4' },
        { 'America/Puerto Rico', 'AST4' },
+       { 'America/Punta Arenas', '<-03>3' },
        { 'America/Rainy River', 'CST6CDT,M3.2.0,M11.1.0' },
        { 'America/Rankin Inlet', 'CST6CDT,M3.2.0,M11.1.0' },
-       { 'America/Recife', 'BRT3' },
+       { 'America/Recife', '<-03>3' },
        { 'America/Regina', 'CST6' },
        { 'America/Resolute', 'CST6CDT,M3.2.0,M11.1.0' },
-       { 'America/Rio Branco', 'ACT5' },
-       { 'America/Santarem', 'BRT3' },
-       { 'America/Santiago', 'CLT4CLST,M8.2.6/24,M5.2.6/24' },
+       { 'America/Rio Branco', '<-05>5' },
+       { 'America/Santarem', '<-03>3' },
+       { 'America/Santiago', '<-04>4<-03>,M8.2.6/24,M5.2.6/24' },
        { 'America/Santo Domingo', 'AST4' },
-       { 'America/Sao Paulo', 'BRT3BRST,M10.3.0/0,M2.3.0/0' },
-       { 'America/Scoresbysund', 'EGT1EGST,M3.5.0/0,M10.5.0/1' },
+       { 'America/Sao Paulo', '<-03>3<-02>,M10.3.0/0,M2.3.0/0' },
+       { 'America/Scoresbysund', '<-01>1<+00>,M3.5.0/0,M10.5.0/1' },
        { 'America/Sitka', 'AKST9AKDT,M3.2.0,M11.1.0' },
        { 'America/St Barthelemy', 'AST4' },
        { 'America/St Johns', 'NST3:30NDT,M3.2.0,M11.1.0' },
@@ -204,16 +205,16 @@ TZ = {
        { 'Antarctica/Casey', '<+11>-11' },
        { 'Antarctica/Davis', '<+07>-7' },
        { 'Antarctica/DumontDUrville', '<+10>-10' },
-       { 'Antarctica/Macquarie', 'MIST-11' },
+       { 'Antarctica/Macquarie', '<+11>-11' },
        { 'Antarctica/Mawson', '<+05>-5' },
        { 'Antarctica/McMurdo', 'NZST-12NZDT,M9.5.0,M4.1.0/3' },
-       { 'Antarctica/Palmer', 'CLT4CLST,M8.2.6/24,M5.2.6/24' },
+       { 'Antarctica/Palmer', '<-03>3' },
        { 'Antarctica/Rothera', '<-03>3' },
        { 'Antarctica/Syowa', '<+03>-3' },
        { 'Antarctica/Troll', '<+00>0<+02>-2,M3.5.0/1,M10.5.0/3' },
        { 'Antarctica/Vostok', '<+06>-6' },
        { 'Arctic/Longyearbyen', 'CET-1CEST,M3.5.0,M10.5.0/3' },
-       { 'Asia/Aden', 'AST-3' },
+       { 'Asia/Aden', '<+03>-3' },
        { 'Asia/Almaty', '<+06>-6' },
        { 'Asia/Amman', 'EET-2EEST,M3.5.4/24,M10.5.5/1' },
        { 'Asia/Anadyr', '<+12>-12' },
@@ -221,102 +222,129 @@ TZ = {
        { 'Asia/Aqtobe', '<+05>-5' },
        { 'Asia/Ashgabat', '<+05>-5' },
        { 'Asia/Atyrau', '<+05>-5' },
-       { 'Asia/Baghdad', 'AST-3' },
-       { 'Asia/Bahrain', 'AST-3' },
+       { 'Asia/Baghdad', '<+03>-3' },
+       { 'Asia/Bahrain', '<+03>-3' },
        { 'Asia/Baku', '<+04>-4' },
-       { 'Asia/Bangkok', 'ICT-7' },
+       { 'Asia/Bangkok', '<+07>-7' },
        { 'Asia/Barnaul', '<+07>-7' },
        { 'Asia/Beirut', 'EET-2EEST,M3.5.0/0,M10.5.0/0' },
        { 'Asia/Bishkek', '<+06>-6' },
-       { 'Asia/Brunei', 'BNT-8' },
+       { 'Asia/Brunei', '<+08>-8' },
        { 'Asia/Chita', '<+09>-9' },
-       { 'Asia/Choibalsan', 'CHOT-8CHOST,M3.5.6,M9.5.6/0' },
+       { 'Asia/Choibalsan', '<+08>-8' },
        { 'Asia/Colombo', '<+0530>-5:30' },
        { 'Asia/Damascus', 'EET-2EEST,M3.5.5/0,M10.5.5/0' },
-       { 'Asia/Dhaka', 'BDT-6' },
-       { 'Asia/Dili', 'TLT-9' },
-       { 'Asia/Dubai', 'GST-4' },
+       { 'Asia/Dhaka', '<+06>-6' },
+       { 'Asia/Dili', '<+09>-9' },
+       { 'Asia/Dubai', '<+04>-4' },
        { 'Asia/Dushanbe', '<+05>-5' },
        { 'Asia/Famagusta', '<+03>-3' },
        { 'Asia/Gaza', 'EET-2EEST,M3.5.6/1,M10.5.6/1' },
        { 'Asia/Hebron', 'EET-2EEST,M3.5.6/1,M10.5.6/1' },
-       { 'Asia/Ho Chi Minh', 'ICT-7' },
+       { 'Asia/Ho Chi Minh', '<+07>-7' },
        { 'Asia/Hong Kong', 'HKT-8' },
-       { 'Asia/Hovd', 'HOVT-7HOVST,M3.5.6,M9.5.6/0' },
+       { 'Asia/Hovd', '<+07>-7' },
        { 'Asia/Irkutsk', '<+08>-8' },
        { 'Asia/Jakarta', 'WIB-7' },
        { 'Asia/Jayapura', 'WIT-9' },
        { 'Asia/Jerusalem', 'IST-2IDT,M3.4.4/26,M10.5.0' },
-       { 'Asia/Kabul', 'AFT-4:30' },
+       { 'Asia/Kabul', '<+0430>-4:30' },
        { 'Asia/Kamchatka', '<+12>-12' },
        { 'Asia/Karachi', 'PKT-5' },
-       { 'Asia/Kathmandu', 'NPT-5:45' },
+       { 'Asia/Kathmandu', '<+0545>-5:45' },
        { 'Asia/Khandyga', '<+09>-9' },
        { 'Asia/Kolkata', 'IST-5:30' },
        { 'Asia/Krasnoyarsk', '<+07>-7' },
-       { 'Asia/Kuala Lumpur', 'MYT-8' },
-       { 'Asia/Kuching', 'MYT-8' },
-       { 'Asia/Kuwait', 'AST-3' },
+       { 'Asia/Kuala Lumpur', '<+08>-8' },
+       { 'Asia/Kuching', '<+08>-8' },
+       { 'Asia/Kuwait', '<+03>-3' },
        { 'Asia/Macau', 'CST-8' },
        { 'Asia/Magadan', '<+11>-11' },
        { 'Asia/Makassar', 'WITA-8' },
-       { 'Asia/Manila', 'PHT-8' },
-       { 'Asia/Muscat', 'GST-4' },
+       { 'Asia/Manila', '<+08>-8' },
+       { 'Asia/Muscat', '<+04>-4' },
        { 'Asia/Nicosia', 'EET-2EEST,M3.5.0/3,M10.5.0/4' },
        { 'Asia/Novokuznetsk', '<+07>-7' },
        { 'Asia/Novosibirsk', '<+07>-7' },
        { 'Asia/Omsk', '<+06>-6' },
        { 'Asia/Oral', '<+05>-5' },
-       { 'Asia/Phnom Penh', 'ICT-7' },
+       { 'Asia/Phnom Penh', '<+07>-7' },
        { 'Asia/Pontianak', 'WIB-7' },
        { 'Asia/Pyongyang', 'KST-8:30' },
-       { 'Asia/Qatar', 'AST-3' },
+       { 'Asia/Qatar', '<+03>-3' },
        { 'Asia/Qyzylorda', '<+06>-6' },
-       { 'Asia/Riyadh', 'AST-3' },
+       { 'Asia/Riyadh', '<+03>-3' },
        { 'Asia/Sakhalin', '<+11>-11' },
        { 'Asia/Samarkand', '<+05>-5' },
        { 'Asia/Seoul', 'KST-9' },
        { 'Asia/Shanghai', 'CST-8' },
-       { 'Asia/Singapore', 'SGT-8' },
+       { 'Asia/Singapore', '<+08>-8' },
        { 'Asia/Srednekolymsk', '<+11>-11' },
        { 'Asia/Taipei', 'CST-8' },
        { 'Asia/Tashkent', '<+05>-5' },
        { 'Asia/Tbilisi', '<+04>-4' },
-       { 'Asia/Tehran', 'IRST-3:30IRDT,J80/0,J264/0' },
-       { 'Asia/Thimphu', 'BTT-6' },
+       { 'Asia/Tehran', '<+0330>-3:30<+0430>,J80/0,J264/0' },
+       { 'Asia/Thimphu', '<+06>-6' },
        { 'Asia/Tokyo', 'JST-9' },
        { 'Asia/Tomsk', '<+07>-7' },
-       { 'Asia/Ulaanbaatar', 'ULAT-8ULAST,M3.5.6,M9.5.6/0' },
-       { 'Asia/Urumqi', 'XJT-6' },
+       { 'Asia/Ulaanbaatar', '<+08>-8' },
+       { 'Asia/Urumqi', '<+06>-6' },
        { 'Asia/Ust-Nera', '<+10>-10' },
-       { 'Asia/Vientiane', 'ICT-7' },
+       { 'Asia/Vientiane', '<+07>-7' },
        { 'Asia/Vladivostok', '<+10>-10' },
        { 'Asia/Yakutsk', '<+09>-9' },
-       { 'Asia/Yangon', 'MMT-6:30' },
+       { 'Asia/Yangon', '<+0630>-6:30' },
        { 'Asia/Yekaterinburg', '<+05>-5' },
        { 'Asia/Yerevan', '<+04>-4' },
-       { 'Atlantic/Azores', 'AZOT1AZOST,M3.5.0/0,M10.5.0/1' },
+       { 'Atlantic/Azores', '<-01>1<+00>,M3.5.0/0,M10.5.0/1' },
        { 'Atlantic/Bermuda', 'AST4ADT,M3.2.0,M11.1.0' },
        { 'Atlantic/Canary', 'WET0WEST,M3.5.0/1,M10.5.0' },
-       { 'Atlantic/Cape Verde', 'CVT1' },
+       { 'Atlantic/Cape Verde', '<-01>1' },
        { 'Atlantic/Faroe', 'WET0WEST,M3.5.0/1,M10.5.0' },
        { 'Atlantic/Madeira', 'WET0WEST,M3.5.0/1,M10.5.0' },
        { 'Atlantic/Reykjavik', 'GMT0' },
-       { 'Atlantic/South Georgia', 'GST2' },
+       { 'Atlantic/South Georgia', '<-02>2' },
        { 'Atlantic/St Helena', 'GMT0' },
-       { 'Atlantic/Stanley', 'FKST3' },
+       { 'Atlantic/Stanley', '<-03>3' },
        { 'Australia/Adelaide', 'ACST-9:30ACDT,M10.1.0,M4.1.0/3' },
        { 'Australia/Brisbane', 'AEST-10' },
        { 'Australia/Broken Hill', 'ACST-9:30ACDT,M10.1.0,M4.1.0/3' },
        { 'Australia/Currie', 'AEST-10AEDT,M10.1.0,M4.1.0/3' },
        { 'Australia/Darwin', 'ACST-9:30' },
-       { 'Australia/Eucla', 'ACWST-8:45' },
+       { 'Australia/Eucla', '<+0845>-8:45' },
        { 'Australia/Hobart', 'AEST-10AEDT,M10.1.0,M4.1.0/3' },
        { 'Australia/Lindeman', 'AEST-10' },
-       { 'Australia/Lord Howe', 'LHST-10:30LHDT-11,M10.1.0,M4.1.0' },
+       { 'Australia/Lord Howe', '<+1030>-10:30<+11>-11,M10.1.0,M4.1.0' },
        { 'Australia/Melbourne', 'AEST-10AEDT,M10.1.0,M4.1.0/3' },
        { 'Australia/Perth', 'AWST-8' },
        { 'Australia/Sydney', 'AEST-10AEDT,M10.1.0,M4.1.0/3' },
+       { 'Etc/GMT', 'GMT0' },
+       { 'Etc/GMT+1', '<-01>1' },
+       { 'Etc/GMT+10', '<-10>10' },
+       { 'Etc/GMT+11', '<-11>11' },
+       { 'Etc/GMT+12', '<-12>12' },
+       { 'Etc/GMT+2', '<-02>2' },
+       { 'Etc/GMT+3', '<-03>3' },
+       { 'Etc/GMT+4', '<-04>4' },
+       { 'Etc/GMT+5', '<-05>5' },
+       { 'Etc/GMT+6', '<-06>6' },
+       { 'Etc/GMT+7', '<-07>7' },
+       { 'Etc/GMT+8', '<-08>8' },
+       { 'Etc/GMT+9', '<-09>9' },
+       { 'Etc/GMT-1', '<+01>-1' },
+       { 'Etc/GMT-10', '<+10>-10' },
+       { 'Etc/GMT-11', '<+11>-11' },
+       { 'Etc/GMT-12', '<+12>-12' },
+       { 'Etc/GMT-13', '<+13>-13' },
+       { 'Etc/GMT-14', '<+14>-14' },
+       { 'Etc/GMT-2', '<+02>-2' },
+       { 'Etc/GMT-3', '<+03>-3' },
+       { 'Etc/GMT-4', '<+04>-4' },
+       { 'Etc/GMT-5', '<+05>-5' },
+       { 'Etc/GMT-6', '<+06>-6' },
+       { 'Etc/GMT-7', '<+07>-7' },
+       { 'Etc/GMT-8', '<+08>-8' },
+       { 'Etc/GMT-9', '<+09>-9' },
        { 'Europe/Amsterdam', 'CET-1CEST,M3.5.0,M10.5.0/3' },
        { 'Europe/Andorra', 'CET-1CEST,M3.5.0,M10.5.0/3' },
        { 'Europe/Astrakhan', '<+04>-4' },
@@ -378,53 +406,52 @@ TZ = {
        { 'Europe/Zaporozhye', 'EET-2EEST,M3.5.0/3,M10.5.0/4' },
        { 'Europe/Zurich', 'CET-1CEST,M3.5.0,M10.5.0/3' },
        { 'Indian/Antananarivo', 'EAT-3' },
-       { 'Indian/Chagos', 'IOT-6' },
-       { 'Indian/Christmas', 'CXT-7' },
-       { 'Indian/Cocos', 'CCT-6:30' },
+       { 'Indian/Chagos', '<+06>-6' },
+       { 'Indian/Christmas', '<+07>-7' },
+       { 'Indian/Cocos', '<+0630>-6:30' },
        { 'Indian/Comoro', 'EAT-3' },
        { 'Indian/Kerguelen', '<+05>-5' },
-       { 'Indian/Mahe', 'SCT-4' },
-       { 'Indian/Maldives', 'MVT-5' },
-       { 'Indian/Mauritius', 'MUT-4' },
+       { 'Indian/Mahe', '<+04>-4' },
+       { 'Indian/Maldives', '<+05>-5' },
+       { 'Indian/Mauritius', '<+04>-4' },
        { 'Indian/Mayotte', 'EAT-3' },
-       { 'Indian/Reunion', 'RET-4' },
-       { 'Pacific/Apia', 'WSST-13WSDT,M9.5.0/3,M4.1.0/4' },
+       { 'Indian/Reunion', '<+04>-4' },
+       { 'Pacific/Apia', '<+13>-13<+14>,M9.5.0/3,M4.1.0/4' },
        { 'Pacific/Auckland', 'NZST-12NZDT,M9.5.0,M4.1.0/3' },
-       { 'Pacific/Bougainville', 'BST-11' },
-       { 'Pacific/Chatham', 'CHAST-12:45CHADT,M9.5.0/2:45,M4.1.0/3:45' },
-       { 'Pacific/Chuuk', 'CHUT-10' },
-       { 'Pacific/Easter', 'EAST6EASST,M8.2.6/22,M5.2.6/22' },
-       { 'Pacific/Efate', 'VUT-11' },
-       { 'Pacific/Enderbury', 'PHOT-13' },
-       { 'Pacific/Fakaofo', 'TKT-13' },
-       { 'Pacific/Fiji', 'FJT-12FJST,M11.1.0,M1.3.0/3' },
-       { 'Pacific/Funafuti', 'TVT-12' },
-       { 'Pacific/Galapagos', 'GALT6' },
-       { 'Pacific/Gambier', 'GAMT9' },
-       { 'Pacific/Guadalcanal', 'SBT-11' },
+       { 'Pacific/Bougainville', '<+11>-11' },
+       { 'Pacific/Chatham', '<+1245>-12:45<+1345>,M9.5.0/2:45,M4.1.0/3:45' },
+       { 'Pacific/Chuuk', '<+10>-10' },
+       { 'Pacific/Easter', '<-06>6<-05>,M8.2.6/22,M5.2.6/22' },
+       { 'Pacific/Efate', '<+11>-11' },
+       { 'Pacific/Enderbury', '<+13>-13' },
+       { 'Pacific/Fakaofo', '<+13>-13' },
+       { 'Pacific/Fiji', '<+12>-12<+13>,M11.1.0,M1.3.0/3' },
+       { 'Pacific/Funafuti', '<+12>-12' },
+       { 'Pacific/Galapagos', '<-06>6' },
+       { 'Pacific/Gambier', '<-09>9' },
+       { 'Pacific/Guadalcanal', '<+11>-11' },
        { 'Pacific/Guam', 'ChST-10' },
        { 'Pacific/Honolulu', 'HST10' },
-       { 'Pacific/Johnston', 'HST10' },
-       { 'Pacific/Kiritimati', 'LINT-14' },
-       { 'Pacific/Kosrae', 'KOST-11' },
-       { 'Pacific/Kwajalein', 'MHT-12' },
-       { 'Pacific/Majuro', 'MHT-12' },
-       { 'Pacific/Marquesas', 'MART9:30' },
+       { 'Pacific/Kiritimati', '<+14>-14' },
+       { 'Pacific/Kosrae', '<+11>-11' },
+       { 'Pacific/Kwajalein', '<+12>-12' },
+       { 'Pacific/Majuro', '<+12>-12' },
+       { 'Pacific/Marquesas', '<-0930>9:30' },
        { 'Pacific/Midway', 'SST11' },
-       { 'Pacific/Nauru', 'NRT-12' },
-       { 'Pacific/Niue', 'NUT11' },
-       { 'Pacific/Norfolk', 'NFT-11' },
-       { 'Pacific/Noumea', 'NCT-11' },
+       { 'Pacific/Nauru', '<+12>-12' },
+       { 'Pacific/Niue', '<-11>11' },
+       { 'Pacific/Norfolk', '<+11>-11' },
+       { 'Pacific/Noumea', '<+11>-11' },
        { 'Pacific/Pago Pago', 'SST11' },
-       { 'Pacific/Palau', 'PWT-9' },
-       { 'Pacific/Pitcairn', 'PST8' },
-       { 'Pacific/Pohnpei', 'PONT-11' },
-       { 'Pacific/Port Moresby', 'PGT-10' },
-       { 'Pacific/Rarotonga', 'CKT10' },
+       { 'Pacific/Palau', '<+09>-9' },
+       { 'Pacific/Pitcairn', '<-08>8' },
+       { 'Pacific/Pohnpei', '<+11>-11' },
+       { 'Pacific/Port Moresby', '<+10>-10' },
+       { 'Pacific/Rarotonga', '<-10>10' },
        { 'Pacific/Saipan', 'ChST-10' },
-       { 'Pacific/Tahiti', 'TAHT10' },
-       { 'Pacific/Tarawa', 'GILT-12' },
+       { 'Pacific/Tahiti', '<-10>10' },
+       { 'Pacific/Tarawa', '<+12>-12' },
        { 'Pacific/Tongatapu', '<+13>-13<+14>,M11.1.0,M1.3.0/3' },
-       { 'Pacific/Wake', 'WAKT-12' },
-       { 'Pacific/Wallis', 'WFT-12' },
+       { 'Pacific/Wake', '<+12>-12' },
+       { 'Pacific/Wallis', '<+12>-12' },
 }
index e5da7c6..cf5afeb 100644 (file)
@@ -16,123 +16,30 @@ OFFSET = {
        akst  = -32400, -- AKST
        akdt  = -28800, -- AKDT
        ast   = -14400, -- AST
-       brt   = -10800, -- BRT
-       art   = -10800, -- ART
-       pyt   = -14400, -- PYT
-       pyst  = -10800, -- PYST
        est   = -18000, -- EST
        cst   = -21600, -- CST
        cdt   = -18000, -- CDT
-       amt   = -14400, -- AMT
-       cot   = -18000, -- COT
        mst   = -25200, -- MST
        mdt   = -21600, -- MDT
-       vet   = -14400, -- VET
-       gft   = -10800, -- GFT
        pst   = -28800, -- PST
        pdt   = -25200, -- PDT
-       act   = -18000, -- ACT
-       wgt   = -10800, -- WGT
-       wgst  =  -7200, -- WGST
-       ect   = -18000, -- ECT
-       gyt   = -14400, -- GYT
-       bot   = -14400, -- BOT
-       pet   = -18000, -- PET
-       pmst  = -10800, -- PMST
-       pmdt  =  -7200, -- PMDT
-       uyt   = -10800, -- UYT
-       fnt   =  -7200, -- FNT
-       srt   = -10800, -- SRT
-       clt   = -14400, -- CLT
-       clst  = -10800, -- CLST
-       egt   =  -3600, -- EGT
-       egst  =      0, -- EGST
        nst   = -12600, -- NST
        ndt   =  -9000, -- NDT
-       mist  =  39600, -- MIST
        nzst  =  43200, -- NZST
        nzdt  =  46800, -- NZDT
-       ict   =  25200, -- ICT
-       bnt   =  28800, -- BNT
-       chot  =  28800, -- CHOT
-       chost =  32400, -- CHOST
-       bdt   =  21600, -- BDT
-       tlt   =  32400, -- TLT
-       gst   =  14400, -- GST
        hkt   =  28800, -- HKT
-       hovt  =  25200, -- HOVT
-       hovst =  28800, -- HOVST
        wib   =  25200, -- WIB
        wit   =  32400, -- WIT
        ist   =   7200, -- IST
        idt   =  10800, -- IDT
-       aft   =  16200, -- AFT
        pkt   =  18000, -- PKT
-       npt   =  20700, -- NPT
-       myt   =  28800, -- MYT
        wita  =  28800, -- WITA
-       pht   =  28800, -- PHT
        kst   =  30600, -- KST
-       sgt   =  28800, -- SGT
-       irst  =  12600, -- IRST
-       irdt  =  16200, -- IRDT
-       btt   =  21600, -- BTT
        jst   =  32400, -- JST
-       ulat  =  28800, -- ULAT
-       ulast =  32400, -- ULAST
-       xjt   =  21600, -- XJT
-       mmt   =  23400, -- MMT
-       azot  =  -3600, -- AZOT
-       azost =      0, -- AZOST
-       cvt   =  -3600, -- CVT
-       fkst  = -10800, -- FKST
        acst  =  34200, -- ACST
        acdt  =  37800, -- ACDT
        aest  =  36000, -- AEST
-       acwst =  31500, -- ACWST
-       lhst  =  37800, -- LHST
-       lhdt  =  39600, -- LHDT
        awst  =  28800, -- AWST
        msk   =  10800, -- MSK
-       iot   =  21600, -- IOT
-       cxt   =  25200, -- CXT
-       cct   =  23400, -- CCT
-       sct   =  14400, -- SCT
-       mvt   =  18000, -- MVT
-       mut   =  14400, -- MUT
-       ret   =  14400, -- RET
-       wsst  =  46800, -- WSST
-       wsdt  =  50400, -- WSDT
-       bst   =  39600, -- BST
-       chast =  45900, -- CHAST
-       chadt =  49500, -- CHADT
-       chut  =  36000, -- CHUT
-       east  = -21600, -- EAST
-       easst = -18000, -- EASST
-       vut   =  39600, -- VUT
-       phot  =  46800, -- PHOT
-       tkt   =  46800, -- TKT
-       fjt   =  43200, -- FJT
-       fjst  =  46800, -- FJST
-       tvt   =  43200, -- TVT
-       galt  = -21600, -- GALT
-       gamt  = -32400, -- GAMT
-       sbt   =  39600, -- SBT
-       lint  =  50400, -- LINT
-       kost  =  39600, -- KOST
-       mht   =  43200, -- MHT
-       mart  = -34200, -- MART
        sst   = -39600, -- SST
-       nrt   =  43200, -- NRT
-       nut   = -39600, -- NUT
-       nft   =  39600, -- NFT
-       nct   =  39600, -- NCT
-       pwt   =  32400, -- PWT
-       pont  =  39600, -- PONT
-       pgt   =  36000, -- PGT
-       ckt   = -36000, -- CKT
-       taht  = -36000, -- TAHT
-       gilt  =  43200, -- GILT
-       wakt  =  43200, -- WAKT
-       wft   =  43200, -- WFT
 }
index b531393..95ff46d 100644 (file)
@@ -74,9 +74,19 @@ local function dhcp_leases_common(family)
                                                hostname = (name ~= "-") and name
                                        }
                                elseif ip and iaid == "ipv4" and family == 4 then
+                                       local mac, mac1, mac2, mac3, mac4, mac5, mac6
+                                       if duid and type(duid) == "string" then
+                                                mac1, mac2, mac3, mac4, mac5, mac6 = duid:match("^(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)(%x%x)$")
+                                       end
+                                       if not (mac1 and mac2 and mac3 and mac4 and mac5 and mac6) then
+                                               mac = "FF:FF:FF:FF:FF:FF"
+                                       else
+                                               mac = mac1..":"..mac2..":"..mac3..":"..mac4..":"..mac5..":"..mac6
+                                       end
                                        rv[#rv+1] = {
                                                expires  = (expire >= 0) and os.difftime(expire, os.time()),
                                                macaddr  = duid,
+                                               macaddr  = mac:lower(),
                                                ipaddr   = ip,
                                                hostname = (name ~= "-") and name
                                        }
index 2a433b5..546fd8e 100644 (file)
        &#160;&#8658;&#160;
        <% for _, fwd in ipairs(zone:get_forwardings_by("src")) do
                fz = fwd:dest_zone()
-               empty = false %>
+               if fz then
+                       empty = false %>
                <label class="zonebadge" style="background-color:<%=fz:get_color()%>">
                        <strong><%=fz:name()%></strong>
                </label>&#160;
-       <% end %>
+       <% end end %>
        <% if empty then %>
                <label class="zonebadge zonebadge-empty">
                        <strong><%=zone:forward():upper()%></strong>
index d1b3045..d5b2321 100644 (file)
@@ -52,12 +52,36 @@ msgstr "Càrrega d'1 minut:"
 msgid "15 Minute Load:"
 msgstr "Càrrega de 15 minuts:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Càrrega de 5 minuts:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -100,7 +124,7 @@ msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
 msgstr ""
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
-msgstr "Configuració <abbr title=\"Light Emitting Diode\">LED</abbr>"
+msgstr "Configuració dels <abbr title=\"Light Emitting Diode\">LED</abbr>s"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Name"
 msgstr "Nom <abbr title=\"Light Emitting Diode\">LED</abbr>"
@@ -128,6 +152,13 @@ msgstr "Consultes concurrents <abbr title=\"màximes\">max.</abbr>"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Parella: %s / Grup: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+"Avís: cal reiniciar manualment el servei cron si el fitxer crontab estava "
+"buit abans d'editar-lo."
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -146,9 +177,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Suport AR"
-
 msgid "ARP retry threshold"
 msgstr "Llindar de reintent ARP"
 
@@ -259,7 +287,8 @@ msgstr ""
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
 msgstr ""
-"Permet autenticació <abbr title=\"Secure Shell\">SSH</abbr> per contrasenya"
+"Permetre l'autenticació <abbr title=\"Secure Shell\">SSH</abbr> amb "
+"contrasenya"
 
 msgid "Allow all except listed"
 msgstr "Permet-les totes menys les llistades"
@@ -272,13 +301,14 @@ msgstr "Permetre el localhost"
 
 msgid "Allow remote hosts to connect to local SSH forwarded ports"
 msgstr ""
-"Permetre a màquines remotes de connectar als ports reenviats de l'SSH local"
+"Permetre a màquines remotes de connectar-se als ports reenviats de l'SSH "
+"local"
 
 msgid "Allow root logins with password"
-msgstr "Permetre l'accés del l'administrador amb paraula clau"
+msgstr "Accés d'administrador amb contrasenya"
 
 msgid "Allow the <em>root</em> user to login with password"
-msgstr "Permetre l'accés de l'usurari <em>root</em> amb paraula clau"
+msgstr "Permetre l'accés de l'usurari <em>root</em> amb contrasenya"
 
 msgid ""
 "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
@@ -390,15 +420,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Estacions associades"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Controlador sense fils d'Atheros 802.11%s"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticació"
 
@@ -472,14 +496,11 @@ msgstr "Enrere al resum"
 msgid "Back to scan results"
 msgstr "Enrere als resultats de l'escaneig"
 
-msgid "Background Scan"
-msgstr "Escaneig de fons"
-
 msgid "Backup / Flash Firmware"
-msgstr "Còpia de seguretat / Recàrrega de programari"
+msgstr "Còpia de seguretat i microprogramari"
 
 msgid "Backup / Restore"
-msgstr "Còpia de seguretat / Restauració"
+msgstr "Còpia de seguretat i restauració de la configuració"
 
 msgid "Backup file list"
 msgstr "Llista de còpies de seguretat"
@@ -542,6 +563,8 @@ msgid ""
 "Build/distribution specific feed definitions. This file will NOT be "
 "preserved in any sysupgrade."
 msgstr ""
+"Repositoris específics de la distribució/compilació. Aquest fitxer NO es "
+"preservarà durant les actualitzacions del microprogramari del sistema."
 
 msgid "Buttons"
 msgstr "Botons"
@@ -614,6 +637,10 @@ msgid ""
 "configuration files. To reset the firmware to its initial state, click "
 "\"Perform reset\" (only possible with squashfs images)."
 msgstr ""
+"Fes clic a \"Genera l'arxiu\" per obtenir un fitxer .tar.gz amb els fitxers "
+"de configuració actuals. Per restablir el microprogramari al seu estat "
+"inicial, fes clic a \"Restableix la configuració\" (només funciona amb "
+"imatges squashfs)."
 
 msgid "Client"
 msgstr "Client"
@@ -638,8 +665,12 @@ msgstr "Ordre"
 msgid "Common Configuration"
 msgstr "Configuració comuna"
 
-msgid "Compression"
-msgstr "Compressió"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuració"
@@ -714,7 +745,7 @@ msgid ""
 "\">LED</abbr>s if possible."
 msgstr ""
 "Personalitza el comportament dels <abbr title=\"Light Emitting Diode\">LED</"
-"abbr>s del dispositiu si és possible."
+"abbr>s del dispositiu, si és possible."
 
 msgid "DHCP Leases"
 msgstr "Arrendaments DHCP"
@@ -858,12 +889,12 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Inhabilita el temporitzador HW-Beacon"
-
 msgid "Disabled"
 msgstr "Inhabilitat"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Descarta les respostes RFC1918 des de dalt"
 
@@ -877,7 +908,7 @@ msgid "Distance to farthest network member in meters."
 msgstr "Distància al membre de la xarxa més allunyat en metres."
 
 msgid "Distribution feeds"
-msgstr ""
+msgstr "Repositoris de la distribució"
 
 msgid "Diversity"
 msgstr "Diversitat"
@@ -902,9 +933,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr "No enviïs les respostes de prova"
-
 msgid "Domain required"
 msgstr "Es requereix un domini"
 
@@ -925,7 +953,7 @@ msgid "Download and install package"
 msgstr "Descarrega i instal·la el paquet"
 
 msgid "Download backup"
-msgstr "Descarrega còpia de seguritat"
+msgstr "Descarrega còpia de seguretat"
 
 msgid "Dropbear Instance"
 msgstr "Instància de Dropbear"
@@ -934,8 +962,8 @@ msgid ""
 "Dropbear offers <abbr title=\"Secure Shell\">SSH</abbr> network shell access "
 "and an integrated <abbr title=\"Secure Copy\">SCP</abbr> server"
 msgstr ""
-"El Dropbear ofereix accés per la xarxa a consola <abbr title=\"Secure Shell"
-"\">SSH</abbr>i un servidor <abbr title=\"Secure Copy\">SCP</abbr> integrat"
+"El Dropbear ofereix accés a una consola <abbr title=\"Secure Shell\">SSH</"
+"abbr> per xarxa i un servidor <abbr title=\"Secure Copy\">SCP</abbr> integrat"
 
 msgid "Dual-Stack Lite (RFC6333)"
 msgstr ""
@@ -1008,6 +1036,9 @@ msgstr "Habilita la funcionalitat VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Habilita l'aprenentatge i l'envelliment"
 
@@ -1032,6 +1063,11 @@ msgstr "Activa/Desactiva"
 msgid "Enabled"
 msgstr "Habilitat"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Habilita l'Spanning Tree Protocol a aquest pont"
 
@@ -1078,21 +1114,24 @@ msgstr ""
 msgid "External"
 msgstr ""
 
-msgid "External system log server"
+msgid "External R0 Key Holder List"
 msgstr ""
 
-msgid "External system log server port"
+msgid "External R1 Key Holder List"
 msgstr ""
 
+msgid "External system log server"
+msgstr "Servidor de registre del sistema extern"
+
+msgid "External system log server port"
+msgstr "Port del servidor de registre del sistema extern"
+
 msgid "External system log server protocol"
-msgstr ""
+msgstr "Protocol del servidor de registre del sistema extern"
 
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Fast Frames"
-
 msgid "File"
 msgstr "Fitxer"
 
@@ -1128,6 +1167,9 @@ msgstr "Acaba"
 msgid "Firewall"
 msgstr "Tallafocs"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Ajusts de tallafocs"
 
@@ -1144,19 +1186,19 @@ msgid "Fixed source port for outbound DNS queries"
 msgstr ""
 
 msgid "Flash Firmware"
-msgstr "Reescriu el microprogramari"
+msgstr "Escriptura del microprogramari a la memòria flaix"
 
 msgid "Flash image..."
-msgstr "Escriu una imatge..."
+msgstr "Puja una imatge..."
 
 msgid "Flash new firmware image"
-msgstr "Escriu una imatge nova"
+msgstr "Escriu una imatge nova a la memòria flaix"
 
 msgid "Flash operations"
-msgstr "Operacions d'escriptura"
+msgstr "Operacions a la memòria flaix"
 
 msgid "Flashing..."
-msgstr "Escrivent..."
+msgstr "Escrivint a la memòria flaix..."
 
 msgid "Force"
 msgstr "Força"
@@ -1173,6 +1215,9 @@ msgstr "Força el TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Força el TKIP i el CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1180,13 +1225,13 @@ msgid "Form token mismatch"
 msgstr ""
 
 msgid "Forward DHCP traffic"
-msgstr "Reenvia el tràfic DHCP"
+msgstr "Reenvia el trànsit DHCP"
 
 msgid "Forward Error Correction Seconds (FECS)"
 msgstr ""
 
 msgid "Forward broadcast traffic"
-msgstr "Reenvia el tràfic difós"
+msgstr "Reenvia el trànsit difós"
 
 msgid "Forwarding mode"
 msgstr "Mode de reenviament"
@@ -1198,7 +1243,7 @@ msgid "Frame Bursting"
 msgstr ""
 
 msgid "Free"
-msgstr "Lliures"
+msgstr "Lliure"
 
 msgid "Free space"
 msgstr "Espai lliure"
@@ -1227,16 +1272,16 @@ msgid "General Setup"
 msgstr ""
 
 msgid "General options for opkg"
-msgstr ""
+msgstr "Opcions generals d'opkg"
 
 msgid "Generate Config"
 msgstr ""
 
 msgid "Generate archive"
-msgstr ""
+msgstr "Genera l'arxiu"
 
 msgid "Generic 802.11%s Wireless Controller"
-msgstr "Controlador sense fil 802.11%s genèric"
+msgstr "Controlador sense fils 802.11%s genèric"
 
 msgid "Given password confirmation did not match, password not changed!"
 msgstr ""
@@ -1293,6 +1338,8 @@ msgid ""
 "Here you can paste public SSH-Keys (one per line) for SSH public-key "
 "authentication."
 msgstr ""
+"Aquí pots afegir-hi les claus SSH públiques (una per línia) per entrar per "
+"SSH amb autenticació per clau."
 
 msgid "Hermes 802.11b Wireless Controller"
 msgstr "Controlador sense fil Hermes 802.11b"
@@ -1302,7 +1349,7 @@ msgstr ""
 "No mostris l'<abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
 
 msgid "Host"
-msgstr ""
+msgstr "Nom de màquina"
 
 msgid "Host entries"
 msgstr "Entrades de noms de màquina"
@@ -1371,7 +1418,7 @@ msgid "IPv4 prefix length"
 msgstr "Longitud de prefix IPv4"
 
 msgid "IPv4-Address"
-msgstr "Adreça IPv6"
+msgstr "Adreça IPv4"
 
 msgid "IPv4-in-IPv4 (RFC2003)"
 msgstr ""
@@ -1383,7 +1430,7 @@ msgid "IPv6 Firewall"
 msgstr "Tallafocs IPv6"
 
 msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "Veïns IPv6"
 
 msgid "IPv6 Settings"
 msgstr ""
@@ -1392,7 +1439,7 @@ msgid "IPv6 ULA-Prefix"
 msgstr ""
 
 msgid "IPv6 WAN Status"
-msgstr "Estado WAN IPv6"
+msgstr "Estat WAN IPv6"
 
 msgid "IPv6 address"
 msgstr "Adreça IPv6"
@@ -1421,9 +1468,15 @@ msgstr "Longitud de prefix IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adreça IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-en-IPv4 (RFC4213)"
 
@@ -1436,7 +1489,7 @@ msgstr "IPv6-sobre-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identitat"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1481,10 +1534,10 @@ msgid "Ignore resolve file"
 msgstr "Ignora el fitxer de resolució"
 
 msgid "Image"
-msgstr "Imatge"
+msgstr "Fitxer d'imatge"
 
 msgid "In"
-msgstr "En"
+msgstr "Entr."
 
 msgid ""
 "In order to prevent unauthorized access to the system, your request has been "
@@ -1524,6 +1577,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"
 
@@ -1569,6 +1625,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Usuari i/o contrasenya invàlids! Si us plau prova-ho de nou."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1577,7 +1636,7 @@ msgstr ""
 "Sembla que intentes actualitzar una imatge que no hi cap a la memòria flaix, "
 "si us plau verifica el fitxer d'imatge!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "Es requereix JavaScript!"
 
 msgid "Join Network"
@@ -1590,7 +1649,7 @@ msgid "Joining Network: %q"
 msgstr ""
 
 msgid "Keep settings"
-msgstr ""
+msgstr "Mantenir la configuració"
 
 msgid "Kernel Log"
 msgstr "Registre del nucli"
@@ -1646,11 +1705,8 @@ 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"
+msgstr "Temps d'arrendament restant"
 
 msgid "Leave empty to autodetect"
 msgstr "Deixeu-ho en blanc per autodetectar"
@@ -1683,13 +1739,29 @@ msgid "Line Uptime"
 msgstr ""
 
 msgid "Link On"
-msgstr "Enllaç activa"
+msgstr "Enllaç actiu"
 
 msgid ""
 "List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1707,15 +1779,17 @@ msgstr ""
 
 msgid "Listen only on the given interface or, if unspecified, on all"
 msgstr ""
+"Habilita el servei en totes les interfícies o, si no se n'especifica cap, en "
+"totes"
 
 msgid "Listening port for inbound DNS queries"
 msgstr ""
 
 msgid "Load"
-msgstr "Carrega"
+msgstr "Càrrega"
 
 msgid "Load Average"
-msgstr "Carrega mitjana"
+msgstr "Càrrega mitjana"
 
 msgid "Loading"
 msgstr "Carregant"
@@ -1822,9 +1896,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Velocitat màxima"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1858,10 +1929,7 @@ msgid "Memory usage (%)"
 msgstr "Ús de Memòria (%)"
 
 msgid "Metric"
-msgstr "Mètric"
-
-msgid "Minimum Rate"
-msgstr "Velocitat mínima"
+msgstr "Mètrica"
 
 msgid "Minimum hold time"
 msgstr ""
@@ -1875,6 +1943,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Manca l'extensió de protocol del protocol %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mode"
 
@@ -1933,9 +2004,6 @@ msgstr "Baixa"
 msgid "Move up"
 msgstr "Puja"
 
-msgid "Multicast Rate"
-msgstr "Velocitat de difusió selectiva"
-
 msgid "Multicast address"
 msgstr "Adreça de difusió selectiva"
 
@@ -1948,6 +2016,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -1997,13 +2068,13 @@ msgid "No NAT-T"
 msgstr ""
 
 msgid "No chains in this table"
-msgstr "No hi ha cadenes a aquesta taula"
+msgstr "No hi ha cadenes en aquesta taula"
 
 msgid "No files found"
 msgstr "Cap fitxer trobat"
 
 msgid "No information available"
-msgstr "Cap informació disponible"
+msgstr "No hi ha informació disponible"
 
 msgid "No negative cache"
 msgstr "Sense memòria cau negativa"
@@ -2018,7 +2089,7 @@ msgid "No package lists available"
 msgstr "No hi ha llistes de paquets disponibles"
 
 msgid "No password set!"
-msgstr "Cap contrasenya establerta!"
+msgstr "No hi ha cap contrasenya establerta!"
 
 msgid "No rules in this chain"
 msgstr "No hi ha regles en aquesta cadena"
@@ -2128,18 +2199,30 @@ msgstr "Opció canviada"
 msgid "Option removed"
 msgstr "Opció treta"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2171,14 +2254,11 @@ msgid "Other:"
 msgstr "Altres:"
 
 msgid "Out"
-msgstr ""
+msgstr "Sort."
 
 msgid "Outbound:"
 msgstr "Sortint:"
 
-msgid "Outdoor Channels"
-msgstr "Canals d'exteriors"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2226,6 +2306,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2283,6 +2366,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "La contrasenya s'ha canviat amb èxit!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Ruta als Certificats CA"
 
@@ -2355,6 +2441,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2376,7 +2471,7 @@ msgid "Private Key"
 msgstr ""
 
 msgid "Proceed"
-msgstr "continua"
+msgstr "Procedeix"
 
 msgid "Processes"
 msgstr "Processos"
@@ -2400,7 +2495,7 @@ msgid "Protocol support is not installed"
 msgstr ""
 
 msgid "Provide NTP server"
-msgstr ""
+msgstr "Habilita el servidor NTP"
 
 msgid "Provide new network"
 msgstr ""
@@ -2420,6 +2515,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Calidad"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2487,18 +2588,21 @@ msgid "Really switch protocol?"
 msgstr ""
 
 msgid "Realtime Connections"
-msgstr ""
+msgstr "Connexions en temps real"
 
 msgid "Realtime Graphs"
-msgstr ""
+msgstr "Gràfiques en temps real"
 
 msgid "Realtime Load"
-msgstr ""
+msgstr "Càrrega en temps real"
 
 msgid "Realtime Traffic"
-msgstr ""
+msgstr "Trànsit en temps real"
 
 msgid "Realtime Wireless"
+msgstr "Dispositiu sense fils en temps real"
+
+msgid "Reassociation Deadline"
 msgstr ""
 
 msgid "Rebind protection"
@@ -2514,7 +2618,7 @@ msgid "Reboots the operating system of your device"
 msgstr "Arranca de nou el sistema operatiu del teu dispositiu"
 
 msgid "Receive"
-msgstr "Rep"
+msgstr "Recepció"
 
 msgid "Receiver Antenna"
 msgstr "Antena receptora"
@@ -2531,9 +2635,6 @@ msgstr "Reconnectant la interfície"
 msgid "References"
 msgstr "Referències"
 
-msgid "Regulatory Domain"
-msgstr "Domini regulatori"
-
 msgid "Relay"
 msgstr "Relé"
 
@@ -2547,10 +2648,10 @@ msgid "Relay bridge"
 msgstr "Pont de relé"
 
 msgid "Remote IPv4 address"
-msgstr "Adreça IPv6 remota"
+msgstr "Adreça IPv4 remota"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "Adreça IPv4 remota o FQDN"
 
 msgid "Remove"
 msgstr "Treu"
@@ -2573,19 +2674,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Alguns ISP ho requereixen, per exemple el Charter amb DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2594,7 +2703,7 @@ msgid ""
 msgstr ""
 
 msgid "Reset"
-msgstr "Reinicia"
+msgstr "Restableix"
 
 msgid "Reset Counters"
 msgstr "Reinicia els comptadors"
@@ -2612,7 +2721,7 @@ msgid "Restart"
 msgstr "Reinicia"
 
 msgid "Restart Firewall"
-msgstr "Reinicia Tallafocs"
+msgstr "Reinicia el tallafocs"
 
 msgid "Restore backup"
 msgstr "Restaura còpia de seguretat"
@@ -2699,10 +2808,10 @@ msgid "Save"
 msgstr "Desa"
 
 msgid "Save & Apply"
-msgstr "Desa y aplica"
+msgstr "Desa i aplica"
 
 msgid "Save &#38; Apply"
-msgstr "Desa y aplica"
+msgstr "Desa i aplica"
 
 msgid "Scan"
 msgstr "Escaneja"
@@ -2727,9 +2836,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Clients separats"
 
-msgid "Separate WDS"
-msgstr "WDS separat"
-
 msgid "Server Settings"
 msgstr "Ajusts de servidor"
 
@@ -2753,9 +2859,14 @@ msgstr "Tipus de servei"
 msgid "Services"
 msgstr "Serveis"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
-msgstr "Sincronització de hora"
+msgstr "Configura la sincronització de l'hora"
 
 msgid "Setup DHCP Server"
 msgstr ""
@@ -2788,7 +2899,7 @@ msgid "Size"
 msgstr "Mida"
 
 msgid "Size (.ipk)"
-msgstr ""
+msgstr "Mida (.ipk)"
 
 msgid "Skip"
 msgstr "Salta"
@@ -2874,7 +2985,7 @@ msgid "Start priority"
 msgstr "Prioritat d'inici"
 
 msgid "Startup"
-msgstr "Arranca"
+msgstr "Arrencada"
 
 msgid "Static IPv4 Routes"
 msgstr "Rutes IPv4 estàtiques"
@@ -2888,9 +2999,6 @@ msgstr "Leases estàtics"
 msgid "Static Routes"
 msgstr "Rutes estàtiques"
 
-msgid "Static WDS"
-msgstr "WDS estàtic"
-
 msgid "Static address"
 msgstr "Adreça estàtica"
 
@@ -2944,7 +3052,7 @@ msgid "Switch protocol"
 msgstr "Protocol de commutador"
 
 msgid "Sync with browser"
-msgstr "Sincronitza amb navegador"
+msgstr "Sincronitza amb el navegador"
 
 msgid "Synchronizing..."
 msgstr "Sincronitzant..."
@@ -2953,13 +3061,13 @@ msgid "System"
 msgstr "Sistema"
 
 msgid "System Log"
-msgstr "Registre de sistema"
+msgstr "Registre del sistema"
 
 msgid "System Properties"
-msgstr "Propietats de sistema"
+msgstr "Propietats del sistema"
 
 msgid "System log buffer size"
-msgstr "Mida de la memòria intermèdia del registre de sistema"
+msgstr "Mida de la memòria intermèdia per al registre del sistema"
 
 msgid "TCP:"
 msgstr "TCP:"
@@ -3047,6 +3155,10 @@ msgid ""
 "compare them with the original file to ensure data integrity.<br /> Click "
 "\"Proceed\" below to start the flash procedure."
 msgstr ""
+"S'ha pujat la imatge per a la memòria flaix. A sota hi ha llistades la suma "
+"de verificació i la mida del fitxer per assegurar la integritat de les dades."
+"<br />Fes clic a \"Procedeix\" a continuació per començar el procés "
+"d'escriptura a la memòria flaix."
 
 msgid "The following changes have been committed"
 msgstr "S'han comès els següents canvis"
@@ -3055,7 +3167,7 @@ msgid "The following changes have been reverted"
 msgstr "S&#39;han desfet els següents canvis"
 
 msgid "The following rules are currently active on this system."
-msgstr "Els següents regles estan actualment actives en aquest sistema."
+msgstr "Les següents regles estan actualment actives en aquest sistema."
 
 msgid "The given network name is not unique"
 msgstr "El nom de xarxa donat no és únic"
@@ -3109,10 +3221,11 @@ msgid ""
 "address of your computer to reach the device again, depending on your "
 "settings."
 msgstr ""
-"El sistema s'està escrivent ara.<br />NO APAGUEU EL DISPOSITIU!<br />Espereu "
-"uns minuts abans d'intentar connectar-vos de nou. Pot ser necessari que "
-"renoveu l'adreça del vostre ordinador per a connectar al dispositiu de nou, "
-"depenent dels vostres ajusts."
+"S'està escrivint la imatge del microprogramari a la memòria flaix.<br />NO "
+"APAGUIS EL DISPOSITIU!<br />Espera uns minuts abans d'intentar connectar-te "
+"de nou. Pot ser necessari que renovis l'adreça DHCP del teu ordinador per "
+"connectar-te de nou a l'encaminador, depenent de la configuració que hi "
+"tinguis."
 
 msgid ""
 "The tunnel end-point is behind NAT, defaults to disabled and only applies to "
@@ -3147,6 +3260,8 @@ msgid ""
 "There is no password set on this router. Please configure a root password to "
 "protect the web interface and enable SSH."
 msgstr ""
+"No s'ha establert cap contrasenya en aquest encaminador. Si us plau, "
+"configura una contrasenya per protegir la interfície web i l'accés SSH."
 
 msgid "This IPv4 address of the relay"
 msgstr ""
@@ -3172,6 +3287,9 @@ msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
 "front of 'exit 0') to execute them at the end of the boot process."
 msgstr ""
+"Aquest és el contingut de /etc/rc.local. Afegeix-hi les teves comandes "
+"(abans de la línia 'exit 0') per executar-les en finalitzar el procés "
+"d'arrencada."
 
 msgid ""
 "This is the local endpoint address assigned by the tunnel broker, it usually "
@@ -3217,10 +3335,10 @@ msgstr ""
 "actualment."
 
 msgid "This section contains no values yet"
-msgstr "Aquesta secció no conté cap valor encara"
+msgstr "Aquesta secció encara no conté cap valor"
 
 msgid "Time Synchronization"
-msgstr "Sincronització de hora"
+msgstr "Sincronització de l'hora"
 
 msgid "Time Synchronization is not configured yet."
 msgstr "La sincronització de hora encara no s'ha configurat."
@@ -3232,6 +3350,8 @@ msgid ""
 "To restore configuration files, you can upload a previously generated backup "
 "archive here."
 msgstr ""
+"Per restaurar els fitxers de configuració, pots pujar una còpia de seguretat "
+"generada anteriorment aquí."
 
 msgid "Tone"
 msgstr ""
@@ -3243,7 +3363,7 @@ msgid "Traceroute"
 msgstr "Rastre de ruta"
 
 msgid "Traffic"
-msgstr "Tràfic"
+msgstr "Trànsit"
 
 msgid "Transfer"
 msgstr "Transferència"
@@ -3252,7 +3372,7 @@ msgid "Transmission Rate"
 msgstr "Taxa de transmissió"
 
 msgid "Transmit"
-msgstr "Transmet"
+msgstr "Transmissió"
 
 msgid "Transmit Power"
 msgstr "Potència de transmissió"
@@ -3261,10 +3381,10 @@ msgid "Transmitter Antenna"
 msgstr "Antena transmissora"
 
 msgid "Trigger"
-msgstr ""
+msgstr "Activador"
 
 msgid "Trigger Mode"
-msgstr ""
+msgstr "Mode d'activació"
 
 msgid "Tunnel ID"
 msgstr "ID del túnel"
@@ -3284,9 +3404,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Mode Turbo"
-
 msgid "Tx-Power"
 msgstr "Potència Tx"
 
@@ -3343,6 +3460,9 @@ msgid ""
 "Check \"Keep settings\" to retain the current configuration (requires a "
 "compatible firmware image)."
 msgstr ""
+"Puja aquí una imatge compatible amb sysupgrade per reemplaçar el "
+"microprogramari actual. Activa \"Mantenir la configuració\" per retenir la "
+"configuració actual (requereix una imatge de microprogramari compatible)."
 
 msgid "Upload archive..."
 msgstr "Puja un arxiu..."
@@ -3351,7 +3471,7 @@ msgid "Uploaded File"
 msgstr "Fitxer pujat"
 
 msgid "Uptime"
-msgstr "Temps d'alta"
+msgstr "Temps en marxa"
 
 msgid "Use <code>/etc/ethers</code>"
 msgstr "Fes servir <code>/etc/ethers</code>"
@@ -3409,6 +3529,11 @@ msgstr "Usat"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3502,7 +3627,7 @@ msgid "Waiting for command to complete..."
 msgstr "Esperant que s'acabi l'ordre..."
 
 msgid "Waiting for device..."
-msgstr ""
+msgstr "Esperant el dispositiu..."
 
 msgid "Warning"
 msgstr "Advertència"
@@ -3538,10 +3663,10 @@ msgid "Wireless Security"
 msgstr "Seguretat sense fils"
 
 msgid "Wireless is disabled or not associated"
-msgstr "El sense fil està inhabilitat o sense associar"
+msgstr "El dispositiu sense fils està inhabilitat o sense associar"
 
 msgid "Wireless is restarting..."
-msgstr "Sense fils està reiniciant..."
+msgstr "El dispositiu sense fils està reiniciant..."
 
 msgid "Wireless network is disabled"
 msgstr "La xarxa sense fil està inhabilitada"
@@ -3556,13 +3681,10 @@ msgid "Wireless shut down"
 msgstr "Sense fils aturat"
 
 msgid "Write received DNS requests to syslog"
-msgstr "Escriure les peticions DNS rebudes al syslog"
+msgstr "Escriure les peticions DNS rebudes al registre del sistema"
 
 msgid "Write system log to file"
-msgstr ""
-
-msgid "XR Support"
-msgstr "Suport XR"
+msgstr "Escriure el registre del sistema al fitxer"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3575,9 +3697,9 @@ msgstr ""
 "dispositiu pot resultar inaccessible!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Has d'activar el Java Script al teu navegador o LuCI no funcionarà "
+"Has d'activar el JavaScript al teu navegador o LuCI no funcionarà "
 "correctament."
 
 msgid ""
@@ -3592,10 +3714,6 @@ msgstr "qualsevol"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estàtic"
-
 msgid "baseT"
 msgstr ""
 
@@ -3669,7 +3787,7 @@ msgstr "fitxer <abbr title=\"Domain Name System\">DNS</abbr> local"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3705,12 +3823,6 @@ msgstr "encaminat"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3723,6 +3835,9 @@ msgstr ""
 msgid "tagged"
 msgstr "etiquetat"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "desconegut"
 
@@ -3744,6 +3859,61 @@ msgstr "sí"
 msgid "« Back"
 msgstr "« Enrere"
 
+#~ msgid "Leasetime"
+#~ msgstr "Duració d'arrendament"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "estàtic"
+
+#~ msgid "AR Support"
+#~ msgstr "Suport AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Controlador sense fils d'Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "Escaneig de fons"
+
+#~ msgid "Compression"
+#~ msgstr "Compressió"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Inhabilita el temporitzador HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "No enviïs les respostes de prova"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Fast Frames"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Velocitat màxima"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Velocitat mínima"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Velocitat de difusió selectiva"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Canals d'exteriors"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domini regulatori"
+
+#~ msgid "Separate WDS"
+#~ msgstr "WDS separat"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS estàtic"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Mode Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Suport XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Es crearà una xarxa addicional si deixes això sense marcar."
 
index d9ee659..d914c37 100644 (file)
@@ -50,12 +50,36 @@ msgstr "Zatížení za 1 minutu:"
 msgid "15 Minute Load:"
 msgstr "Zatížení za 15 minut:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Zatížení za 5 minut:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -125,6 +149,11 @@ msgstr "Nejvyšší počet souběžných dotazů"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -143,9 +172,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Podpora AR"
-
 msgid "ARP retry threshold"
 msgstr "ARP limit opakování"
 
@@ -390,15 +416,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Připojení klienti"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s bezdrátový ovladač"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentizace"
 
@@ -471,9 +491,6 @@ msgstr "Zpět k přehledu"
 msgid "Back to scan results"
 msgstr "Zpět k výsledkům vyhledávání"
 
-msgid "Background Scan"
-msgstr "Vyhledávat na pozadí"
-
 msgid "Backup / Flash Firmware"
 msgstr "Zálohovat / nahrát firmware"
 
@@ -642,8 +659,12 @@ msgstr "Příkaz"
 msgid "Common Configuration"
 msgstr "Společná nastavení"
 
-msgid "Compression"
-msgstr "Komprese"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Nastavení"
@@ -864,12 +885,12 @@ msgstr "Zakázat nastavení DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Zakázat HW-Beacon časovač"
-
 msgid "Disabled"
 msgstr "Zakázáno"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Vyřadit upstream RFC1918 odpovědi"
 
@@ -910,9 +931,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Nepřeposílat reverzní dotazy na místní sítě"
 
-msgid "Do not send probe responses"
-msgstr "Neodpovídat na vyhledávání"
-
 msgid "Domain required"
 msgstr "Vyžadována doména"
 
@@ -1018,6 +1036,9 @@ msgstr "Povolit funkcionalitu VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Povolit ARP učení a stárnutí"
 
@@ -1042,6 +1063,11 @@ msgstr "Povolit/Zakázat"
 msgid "Enabled"
 msgstr "Povoleno"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Na tomto síťovém mostě povolit Spanning Tree Protocol"
 
@@ -1090,6 +1116,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Externí protokolovací server"
 
@@ -1102,9 +1134,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Rychlé rámce"
-
 msgid "File"
 msgstr "Soubor"
 
@@ -1140,6 +1169,9 @@ msgstr "Dokončit"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Nastavení firewallu"
 
@@ -1185,6 +1217,9 @@ msgstr "Vynutit TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Vynutit TKIP a CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1432,9 +1467,15 @@ msgstr "Délka IPv6 prefixu"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6 adresa"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1447,7 +1488,7 @@ msgstr "IPv6-over-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identita"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1535,6 +1576,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í"
 
@@ -1582,6 +1626,9 @@ msgstr "Uvedené VLAN ID je neplatné! Každé ID musí být jedinečné"
 msgid "Invalid username and/or password! Please try again."
 msgstr "Špatné uživatelské jméno a/nebo heslo! Prosím zkuste to znovu."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1590,7 +1637,7 @@ msgstr ""
 "Zdá se, že se pokoušíte zapsat obraz, který se nevejde do flash paměti. "
 "Prosím ověřte soubor s obrazem!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "Vyžadován JavaScript!"
 
 msgid "Join Network"
@@ -1659,9 +1706,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"
 
@@ -1705,6 +1749,22 @@ msgstr ""
 "Seznam <abbr title=\"Domain Name System\">DNS</abbr> serverů, na které "
 "přeposílat požadavky"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1844,9 +1904,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Nejvyšší míra"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Nejvyšší povolené množství aktivních DHCP zápůjček"
 
@@ -1882,9 +1939,6 @@ msgstr "Využití paměti (%)"
 msgid "Metric"
 msgstr "Metrika"
 
-msgid "Minimum Rate"
-msgstr "Nejnižší hodnota"
-
 msgid "Minimum hold time"
 msgstr "Minimální čas zápůjčky"
 
@@ -1897,6 +1951,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Chybějící rozšíření protokolu %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mód"
 
@@ -1955,9 +2012,6 @@ msgstr "Přesunout dolů"
 msgid "Move up"
 msgstr "Přesunout nahoru"
 
-msgid "Multicast Rate"
-msgstr "Hodnota vícesměrového vysílání"
-
 msgid "Multicast address"
 msgstr "Adresa vícesměrového vysílání"
 
@@ -1970,6 +2024,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2149,18 +2206,30 @@ msgstr "Volba změněna"
 msgid "Option removed"
 msgstr "Volba odstraněna"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2197,9 +2266,6 @@ msgstr "Ven"
 msgid "Outbound:"
 msgstr "Odchozí:"
 
-msgid "Outdoor Channels"
-msgstr "Venkovní kanály"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2249,6 +2315,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2306,6 +2375,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Heslo bylo úspěšně změněno!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Cesta k certifikátu CA"
 
@@ -2378,6 +2450,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2445,6 +2526,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Kvalita"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2539,6 +2626,9 @@ msgstr "Provoz v reálném čase"
 msgid "Realtime Wireless"
 msgstr "Wireless v reálném čase"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Opětovné nastavení ochrany"
 
@@ -2569,9 +2659,6 @@ msgstr "Přepojuji rozhraní"
 msgid "References"
 msgstr "Reference"
 
-msgid "Regulatory Domain"
-msgstr "Doména regulátora"
-
 msgid "Relay"
 msgstr "Přenos"
 
@@ -2611,6 +2698,9 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 # Charter je poskytovate
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Vyžadováno u některých ISP, např. Charter s DocSIS 3"
@@ -2618,13 +2708,18 @@ msgstr "Vyžadováno u některých ISP, např. Charter s DocSIS 3"
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2767,9 +2862,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Oddělovat klienty"
 
-msgid "Separate WDS"
-msgstr "Oddělovat WDS"
-
 msgid "Server Settings"
 msgstr "Nastavení serveru"
 
@@ -2793,6 +2885,11 @@ msgstr "Typ služby"
 msgid "Services"
 msgstr "Služby"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Nastavit synchronizaci času"
@@ -2933,9 +3030,6 @@ msgstr "Statické zápůjčky"
 msgid "Static Routes"
 msgstr "Statické trasy"
 
-msgid "Static WDS"
-msgstr "Statický WDS"
-
 msgid "Static address"
 msgstr "Statická adresa"
 
@@ -3350,9 +3444,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Turbo mód"
-
 msgid "Tx-Power"
 msgstr "Tx-Power"
 
@@ -3481,6 +3572,11 @@ msgstr "Použit"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3633,9 +3729,6 @@ msgstr "Zapisovat přijaté požadavky DNS do systemového logu"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Podpora XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3646,9 +3739,9 @@ msgstr ""
 "\"network\", vaše zařízení se může stát nepřístupným!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Aby LuCI fungoval správně, musíte mít v prohlížeči povolený Javascript."
+"Aby LuCI fungoval správně, musíte mít v prohlížeči povolený JavaScript."
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3662,9 +3755,6 @@ msgstr "libovolný"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3738,7 +3828,7 @@ msgstr "místní <abbr title=\"Domain Name System\">DNS</abbr> soubor"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3774,12 +3864,6 @@ msgstr "směrované"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3792,6 +3876,9 @@ msgstr ""
 msgid "tagged"
 msgstr "označený"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "neznámý"
 
@@ -3813,6 +3900,57 @@ msgstr "ano"
 msgid "« Back"
 msgstr "« Zpět"
 
+#~ msgid "Leasetime"
+#~ msgstr "Doba trvání zápůjčky"
+
+#~ msgid "AR Support"
+#~ msgstr "Podpora AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s bezdrátový ovladač"
+
+#~ msgid "Background Scan"
+#~ msgstr "Vyhledávat na pozadí"
+
+#~ msgid "Compression"
+#~ msgstr "Komprese"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Zakázat HW-Beacon časovač"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Neodpovídat na vyhledávání"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Rychlé rámce"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Nejvyšší míra"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Nejnižší hodnota"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Hodnota vícesměrového vysílání"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Venkovní kanály"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Doména regulátora"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Oddělovat WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Statický WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo mód"
+
+#~ msgid "XR Support"
+#~ msgstr "Podpora XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Pokud není zaškrtnuto, bude vytvořena dodatečná síť."
 
index 1587e8f..9b469d6 100644 (file)
@@ -1,17 +1,17 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-05-26 17:57+0200\n"
-"PO-Revision-Date: 2013-03-29 12:13+0200\n"
+"PO-Revision-Date: 2017-10-17 22:46+0200\n"
 "Last-Translator: JoeSemler <josef.semler@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: de\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n != 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 2.0.4\n"
+"Language-Team: \n"
 
 msgid "%s is untagged in multiple VLANs!"
 msgstr ""
@@ -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):"
@@ -52,12 +52,36 @@ msgstr "Systemlast (1 Minute):"
 msgid "15 Minute Load:"
 msgstr "Systemlast (15 Minuten):"
 
+msgid "4-character hexadecimal ID"
+msgstr "vierstellige hexadezimale ID"
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Systemlast (5 Minuten):"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr "sechstellige hexadezimale ID (ohne Doppelpunkte)"
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr "Maximales Timeout für Quelladressprüfungen (SA Query)"
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr "Wiederholungsintervall für Quelladressprüfungen (SA Query)"
+
+msgid "802.11w Management Frame Protection"
+msgstr "802.11w: Schutz von Management-Frames aktivieren"
+
+msgid "802.11w maximum timeout"
+msgstr "802.11w: Maximales Timeout"
+
+msgid "802.11w retry timeout"
+msgstr "802.11w: Wiederholungsintervall"
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -95,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"
@@ -126,6 +150,11 @@ msgstr "<abbr title=\"maximal\">Max.</abbr> Anzahl gleichzeitiger Abfragen"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Paarweise: %s / Gruppe: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -144,9 +173,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR-Unterstützung"
-
 msgid "ARP retry threshold"
 msgstr "Grenzwert für ARP-Auflösungsversuche"
 
@@ -250,9 +276,11 @@ msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
 "address"
 msgstr ""
+"IP-Adressen sequenziell vergeben, beginnend mit der kleinsten verfügbaren "
+"Adresse"
 
 msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "IPs sequenziell vergeben"
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
 msgstr "Erlaube Anmeldung per Passwort"
@@ -284,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"
@@ -292,7 +320,7 @@ msgid ""
 msgstr ""
 
 msgid "Always announce default router"
-msgstr ""
+msgstr "Immer Defaultrouter ankündigen"
 
 msgid "Annex"
 msgstr ""
@@ -313,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 ""
@@ -325,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 ""
@@ -341,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"
@@ -378,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..."
@@ -385,24 +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 "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s W-LAN Adapter"
-
 msgid "Auth Group"
-msgstr ""
-
-msgid "AuthGroup"
-msgstr ""
+msgstr "Berechtigungsgruppe"
 
 msgid "Authentication"
 msgstr "Authentifizierung"
 
 msgid "Authentication Type"
-msgstr ""
+msgstr "Authentifizierungstyp"
 
 msgid "Authoritative"
 msgstr "Authoritativ"
@@ -414,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"
@@ -470,9 +498,6 @@ msgstr "Zurück zur Übersicht"
 msgid "Back to scan results"
 msgstr "Zurück zu den Scan-Ergebnissen"
 
-msgid "Background Scan"
-msgstr "Hintergrundscan"
-
 msgid "Backup / Flash Firmware"
 msgstr "Backup / Firmware Update"
 
@@ -486,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 "
@@ -502,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"
@@ -541,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 (%)"
@@ -555,7 +586,7 @@ msgid "Cancel"
 msgstr "Abbrechen"
 
 msgid "Category"
-msgstr ""
+msgstr "Kategorie"
 
 msgid "Chain"
 msgstr "Kette"
@@ -576,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"
@@ -589,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 "
@@ -602,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 "
@@ -639,8 +675,16 @@ msgstr "Befehl"
 msgid "Common Configuration"
 msgstr "Allgemeine Konfiguration"
 
-msgid "Compression"
-msgstr "Kompression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
+"Deaktiviert bestimmte EAPOL-Key-Retransmissionen um Key-Reinstallation "
+"(KRACK) Angriffe auf Client-Seite zu erschweren. Diese Abhilfemaßnahme kann "
+"Kompatibilitätsprobleme verursachen und die Zuverlässigkeit von "
+"Schlüsselerneuerungen in ausgelasteten Umgebungen verringern."
 
 msgid "Configuration"
 msgstr "Konfiguration"
@@ -664,7 +708,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"
@@ -700,15 +744,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"
@@ -734,7 +780,7 @@ msgid "DHCPv6 Leases"
 msgstr "DHCPv6-Leases"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "DHCPv6 Client"
 
 msgid "DHCPv6-Mode"
 msgstr ""
@@ -755,13 +801,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 ""
@@ -770,13 +816,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"
@@ -788,10 +834,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"
@@ -829,16 +875,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"
@@ -859,12 +905,12 @@ msgstr "DNS-Verarbeitung deaktivieren"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Deaktiviere Hardware-Beacon Zeitgeber"
-
 msgid "Disabled"
 msgstr "Deaktiviert"
 
+msgid "Disabled (default)"
+msgstr "Deaktiviert (Standard)"
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Eingehende RFC1918-Antworten verwerfen"
 
@@ -878,7 +924,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"
@@ -908,9 +954,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Keine Rückwärtsauflösungen für lokale Netzwerke weiterleiten"
 
-msgid "Do not send probe responses"
-msgstr "Scan-Anforderungen nicht beantworten"
-
 msgid "Domain required"
 msgstr "Anfragen nur mit Domain"
 
@@ -918,7 +961,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 "
@@ -958,7 +1001,7 @@ msgstr ""
 "Clients mit konfigurierten statischen Leases bedient"
 
 msgid "EA-bits length"
-msgstr ""
+msgstr "EA-Bitlänge"
 
 msgid "EAP-Method"
 msgstr "EAP-Methode"
@@ -970,6 +1013,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"
@@ -990,7 +1035,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"
@@ -1002,7 +1047,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"
@@ -1011,19 +1056,23 @@ 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"
+
+#, fuzzy
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr "Key Reinstallation (KRACK) Gegenmaßnahmen aktivieren "
 
 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"
@@ -1037,6 +1086,13 @@ msgstr "Aktivieren/Deaktivieren"
 msgid "Enabled"
 msgstr "Aktiviert"
 
+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"
 
@@ -1047,10 +1103,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..."
@@ -1059,7 +1115,7 @@ msgid "Error"
 msgstr "Fehler"
 
 msgid "Errored seconds (ES)"
-msgstr ""
+msgstr "Fehlersekunden (ES)"
 
 msgid "Ethernet Adapter"
 msgstr "Netzwerkschnittstelle"
@@ -1068,7 +1124,7 @@ msgid "Ethernet Switch"
 msgstr "Netzwerk Switch"
 
 msgid "Exclude interfaces"
-msgstr ""
+msgstr "Schnittstellen ausschließen"
 
 msgid "Expand hosts"
 msgstr "Hosts vervollständigen"
@@ -1084,7 +1140,13 @@ msgstr ""
 "(<code>2m</code>)."
 
 msgid "External"
-msgstr ""
+msgstr "Extern"
+
+msgid "External R0 Key Holder List"
+msgstr "Externe R0-Key-Holder-List"
+
+msgid "External R1 Key Holder List"
+msgstr "Externe R1-Key-Holder-List"
 
 msgid "External system log server"
 msgstr "Externer Protokollserver IP"
@@ -1093,13 +1155,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 ""
-
-msgid "Fast Frames"
-msgstr "Schnelle Frames"
+msgstr "Zusätzliche SSH-Kommando-Optionen"
 
 msgid "File"
 msgstr "Datei"
@@ -1123,6 +1182,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"
@@ -1136,6 +1198,9 @@ msgstr "Fertigstellen"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr "Firewall-Markierung"
+
 msgid "Firewall Settings"
 msgstr "Firewall Einstellungen"
 
@@ -1143,7 +1208,7 @@ msgid "Firewall Status"
 msgstr "Firewall-Status"
 
 msgid "Firmware File"
-msgstr ""
+msgstr "Firmware-Datei"
 
 msgid "Firmware Version"
 msgstr "Firmware Version"
@@ -1183,17 +1248,20 @@ msgstr "Erzwinge TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Erzwinge TKIP und CCMP (AES)"
 
+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"
@@ -1217,6 +1285,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"
@@ -1237,10 +1307,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"
@@ -1254,10 +1324,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..."
@@ -1266,19 +1336,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"
@@ -1287,7 +1357,7 @@ msgid "Hang Up"
 msgstr "Auflegen"
 
 msgid "Header Error Code Errors (HEC)"
-msgstr ""
+msgstr "Anzahl Header-Error-Code-Fehler (HEC)"
 
 msgid "Heartbeat"
 msgstr ""
@@ -1339,7 +1409,7 @@ msgid "IKE DH Group"
 msgstr ""
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "IP-Adressen"
 
 msgid "IP address"
 msgstr "IP-Adresse"
@@ -1360,7 +1430,7 @@ msgid "IPv4 and IPv6"
 msgstr "IPv4 und IPv6"
 
 msgid "IPv4 assignment length"
-msgstr ""
+msgstr "IPv4 Zuweisungslänge"
 
 msgid "IPv4 broadcast"
 msgstr "IPv4 Broadcast"
@@ -1375,7 +1445,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"
@@ -1393,13 +1463,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"
@@ -1408,13 +1478,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"
@@ -1429,11 +1499,17 @@ 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 "IPv6 Präfixdelegation (PD)"
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1446,11 +1522,11 @@ msgstr "IPv6-über-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identität"
 
-msgid "If checked, 1DES is enaled"
-msgstr ""
+msgid "If checked, 1DES is enabled"
+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"
@@ -1502,6 +1578,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"
@@ -1523,6 +1602,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"
@@ -1536,6 +1617,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"
 
@@ -1549,7 +1634,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."
@@ -1564,7 +1649,7 @@ msgid "Interfaces"
 msgstr "Schnittstellen"
 
 msgid "Internal"
-msgstr ""
+msgstr "Intern"
 
 msgid "Internal Server Error"
 msgstr "Interner Serverfehler"
@@ -1582,6 +1667,9 @@ msgid "Invalid username and/or password! Please try again."
 msgstr ""
 "Ungültiger Benutzername oder ungültiges Passwort! Bitte erneut versuchen. "
 
+msgid "Isolate Clients"
+msgstr "Clients isolieren"
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1590,8 +1678,8 @@ msgstr ""
 "Das verwendete Image scheint zu groß für den internen Flash-Speicher zu "
 "sein. Überprüfen Sie die Imagedatei!"
 
-msgid "Java Script required!"
-msgstr "Java-Script benötigt!"
+msgid "JavaScript required!"
+msgstr "JavaScript benötigt!"
 
 msgid "Join Network"
 msgstr "Netzwerk beitreten"
@@ -1600,7 +1688,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"
@@ -1645,13 +1733,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"
@@ -1659,9 +1747,6 @@ msgstr "Lease-Gültigkeitsdauer"
 msgid "Leasefile"
 msgstr "Leasedatei"
 
-msgid "Leasetime"
-msgstr "Laufzeit"
-
 msgid "Leasetime remaining"
 msgstr "Verbleibende Gültigkeit"
 
@@ -1679,21 +1764,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"
@@ -1705,9 +1792,25 @@ msgstr ""
 "Liste von <abbr title=\"Domain Name System\">DNS</abbr>-Servern an welche "
 "Requests weitergeleitet werden"
 
-msgid "List of SSH key files for auth"
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
 msgstr ""
 
+msgid "List of SSH key files for auth"
+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"
 
@@ -1715,10 +1818,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 ""
@@ -1738,7 +1841,7 @@ msgid "Loading"
 msgstr "Lade"
 
 msgid "Local IP address to assign"
-msgstr ""
+msgstr "Lokale IP-Adresse"
 
 msgid "Local IPv4 address"
 msgstr "Lokale IPv4 Adresse"
@@ -1747,7 +1850,7 @@ msgid "Local IPv6 address"
 msgstr "Lokale IPv6 Adresse"
 
 msgid "Local Service Only"
-msgstr ""
+msgstr "Nur lokale Dienste"
 
 msgid "Local Startup"
 msgstr "Lokales Startskript"
@@ -1786,7 +1889,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"
@@ -1804,7 +1907,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)"
@@ -1839,16 +1942,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 ""
-
-msgid "Maximum Rate"
-msgstr "Höchstübertragungsrate"
+msgstr "Maximal erreichbare Datenrate (ATTNDR)"
 
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Maximal zulässige Anzahl von aktiven DHCP-Leases"
@@ -1869,6 +1969,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"
@@ -1885,26 +1988,26 @@ msgstr "Speichernutzung (%)"
 msgid "Metric"
 msgstr "Metrik"
 
-msgid "Minimum Rate"
-msgstr "Mindestübertragungsrate"
-
 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 "Mobilitätsbereich"
+
 msgid "Mode"
 msgstr "Modus"
 
 msgid "Model"
-msgstr ""
+msgstr "Modell"
 
 msgid "Modem device"
 msgstr "Modemgerät"
@@ -1947,7 +2050,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"
@@ -1958,9 +2061,6 @@ msgstr "Nach unten schieben"
 msgid "Move up"
 msgstr "Nach oben schieben"
 
-msgid "Multicast Rate"
-msgstr "Multicastrate"
-
 msgid "Multicast address"
 msgstr "Multicast-Adresse"
 
@@ -1968,9 +2068,12 @@ msgid "NAS ID"
 msgstr "NAS ID"
 
 msgid "NAT-T Mode"
-msgstr ""
+msgstr "NAT-T Modus"
 
 msgid "NAT64 Prefix"
+msgstr "NAT64 Präfix"
+
+msgid "NCM"
 msgstr ""
 
 msgid "NDP-Proxy"
@@ -1983,7 +2086,7 @@ msgid "NTP server candidates"
 msgstr "NTP Server Kandidaten"
 
 msgid "NTP sync time-out"
-msgstr ""
+msgstr "NTP Synchronisierungstimeout"
 
 msgid "Name"
 msgstr "Name"
@@ -2019,7 +2122,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"
@@ -2056,16 +2159,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"
@@ -2086,7 +2189,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"
@@ -2101,10 +2204,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"
@@ -2146,7 +2249,7 @@ msgid "OpenConnect (CISCO AnyConnect)"
 msgstr ""
 
 msgid "Operating frequency"
-msgstr ""
+msgstr "Betriebsfrequenz"
 
 msgid "Option changed"
 msgstr "Option geändert"
@@ -2154,41 +2257,69 @@ msgstr "Option geändert"
 msgid "Option removed"
 msgstr "Option entfernt"
 
+msgid "Optional"
+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 ""
+"Optional, angeben wenn das SIXSS Konto mehr als einen Tunnel beinhaltet"
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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. Create routes for Allowed IPs for this peer."
+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 "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"
@@ -2202,11 +2333,8 @@ msgstr "Aus"
 msgid "Outbound:"
 msgstr "Ausgehend:"
 
-msgid "Outdoor Channels"
-msgstr "Funkkanal für den Ausseneinsatz"
-
 msgid "Output Interface"
-msgstr ""
+msgstr "Ausgehende Schnittstelle"
 
 msgid "Override MAC address"
 msgstr "MAC-Adresse überschreiben"
@@ -2215,13 +2343,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"
@@ -2254,6 +2382,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2273,10 +2404,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 ""
@@ -2303,14 +2434,17 @@ 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!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Pfad zum CA-Zertifikat"
 
@@ -2324,22 +2458,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 ""
@@ -2351,7 +2485,7 @@ msgid "Perform reset"
 msgstr "Reset durchführen"
 
 msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "Persistentes Keep-Alive"
 
 msgid "Phy Rate:"
 msgstr "Phy-Rate:"
@@ -2378,13 +2512,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 "LTE bevorzugen"
+
+msgid "Prefer UMTS"
+msgstr "UMTS bevorzugen"
+
+msgid "Prefix Delegated"
+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 "
@@ -2394,7 +2537,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"
@@ -2403,7 +2546,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"
@@ -2412,7 +2555,7 @@ msgid "Processes"
 msgstr "Prozesse"
 
 msgid "Profile"
-msgstr ""
+msgstr "Profil"
 
 msgid "Prot."
 msgstr "Prot."
@@ -2439,10 +2582,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 ""
@@ -2450,6 +2595,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Qualität"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2545,6 +2696,9 @@ msgstr "Echtzeitverkehr"
 msgid "Realtime Wireless"
 msgstr "Echtzeit-WLAN-Signal"
 
+msgid "Reassociation Deadline"
+msgstr "Reassoziierungsfrist"
+
 msgid "Rebind protection"
 msgstr "DNS-Rebind-Schutz"
 
@@ -2564,7 +2718,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"
@@ -2575,9 +2729,6 @@ msgstr "Verbinde Schnittstelle neu"
 msgid "References"
 msgstr "Verweise"
 
-msgid "Regulatory Domain"
-msgstr "Geltungsbereich (Regulatory Domain)"
-
 msgid "Relay"
 msgstr "Relay"
 
@@ -2594,7 +2745,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"
@@ -2609,34 +2760,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 "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 "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 "Required. Public key of peer."
+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"
@@ -2675,19 +2842,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"
@@ -2726,13 +2893,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"
@@ -2774,22 +2941,21 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Clients isolieren"
 
-msgid "Separate WDS"
-msgstr "Separates WDS"
-
 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"
@@ -2800,6 +2966,14 @@ msgstr "Service-Typ"
 msgid "Services"
 msgstr "Dienste"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+"Schnittstelleneigenschaften werden unabhängig vom Link gesetzt (ist die "
+"Option ausgewählt, so werden die Hotplug-Skripte bei Änderung nicht "
+"aufgerufen)"
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Zeitsynchronisierung einrichten"
@@ -2808,10 +2982,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"
@@ -2826,7 +3000,7 @@ msgid "Signal"
 msgstr "Signal"
 
 msgid "Signal Attenuation (SATN)"
-msgstr ""
+msgstr "Signaldämpfung (SATN)"
 
 msgid "Signal:"
 msgstr "Signal:"
@@ -2835,7 +3009,7 @@ msgid "Size"
 msgstr "Größe"
 
 msgid "Size (.ipk)"
-msgstr ""
+msgstr "Größe (.ipk)"
 
 msgid "Skip"
 msgstr "Überspringen"
@@ -2881,7 +3055,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"
@@ -2907,17 +3081,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"
@@ -2943,9 +3121,6 @@ msgstr "Statische Einträge"
 msgid "Static Routes"
 msgstr "Statische Routen"
 
-msgid "Static WDS"
-msgstr "Statisches WDS"
-
 msgid "Static address"
 msgstr "Statische Adresse"
 
@@ -2972,10 +3147,11 @@ msgid "Submit"
 msgstr "Absenden"
 
 msgid "Suppress logging"
-msgstr ""
+msgstr "Logeinträge unterdrücken"
 
 msgid "Suppress logging of the routine operation of these protocols"
 msgstr ""
+"Logeinträge für erfolgreiche Operationen dieser Protokolle unterdrücken"
 
 msgid "Swap"
 msgstr ""
@@ -2995,6 +3171,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 ""
@@ -3073,10 +3251,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>"
@@ -3093,6 +3274,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."
@@ -3146,7 +3329,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="
@@ -3170,6 +3353,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 "
@@ -3194,6 +3378,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 "
@@ -3236,6 +3422,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 "
@@ -3251,6 +3439,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 "
@@ -3272,11 +3463,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 ""
@@ -3322,7 +3515,7 @@ msgstr ""
 "Backup-Archiv hochgeladen werden."
 
 msgid "Tone"
-msgstr ""
+msgstr "Ton"
 
 msgid "Total Available"
 msgstr "Gesamt verfügbar"
@@ -3362,19 +3555,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 ""
-
-msgid "Turbo Mode"
-msgstr "Turbo Modus"
+msgstr "Tunneltyp"
 
 msgid "Tx-Power"
 msgstr "Sendestärke"
@@ -3395,7 +3585,7 @@ msgid "USB Device"
 msgstr "USB-Gerät"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "USB Anschlüsse"
 
 msgid "UUID"
 msgstr "UUID"
@@ -3404,7 +3594,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"
@@ -3416,7 +3606,7 @@ msgid "Unmanaged"
 msgstr "Ignoriert"
 
 msgid "Unmount"
-msgstr ""
+msgstr "Aushängen"
 
 msgid "Unsaved Changes"
 msgstr "Ungespeicherte Änderungen"
@@ -3464,16 +3654,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"
@@ -3505,11 +3695,18 @@ msgstr "Belegt"
 msgid "Used Key Slot"
 msgstr "Benutzer Schlüsselindex"
 
-msgid "User certificate (PEM encoded)"
+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 "PEM-kodiertes Benutzerzertifikat"
 
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "PEM-kodierter Benutzerschlüssel"
 
 msgid "Username"
 msgstr "Benutzername"
@@ -3527,34 +3724,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"
@@ -3590,6 +3787,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..."
@@ -3598,22 +3797,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 ""
@@ -3655,10 +3857,7 @@ msgid "Write received DNS requests to syslog"
 msgstr "Empfangene DNS-Anfragen in das Systemprotokoll schreiben"
 
 msgid "Write system log to file"
-msgstr ""
-
-msgid "XR Support"
-msgstr "XR-Unterstützung"
+msgstr "Systemprotokoll in Datei schreiben"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3671,9 +3870,9 @@ msgstr ""
 "werden könnte das Gerät unerreichbar werden!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Im Browser muss Java-Script aktiviert sein oder LuCI wird nicht richtig "
+"Im Browser muss JavaScript aktiviert sein oder LuCI wird nicht richtig "
 "funktionieren."
 
 msgid ""
@@ -3688,9 +3887,6 @@ msgstr "beliebig"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatisch"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3713,7 +3909,7 @@ msgid "disable"
 msgstr "deaktivieren"
 
 msgid "disabled"
-msgstr ""
+msgstr "deaktiviert"
 
 msgid "expired"
 msgstr "abgelaufen"
@@ -3739,7 +3935,7 @@ msgid "hidden"
 msgstr "versteckt"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "hybrider Modus"
 
 msgid "if target is a network"
 msgstr "falls Ziel ein Netzwerk ist"
@@ -3760,10 +3956,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 "navigation Navigation"
-msgstr ""
+msgid "minutes"
+msgstr "Minuten"
 
 msgid "no"
 msgstr "nein"
@@ -3775,7 +3971,7 @@ msgid "none"
 msgstr "keine"
 
 msgid "not present"
-msgstr ""
+msgstr "nicht vorhanden"
 
 msgid "off"
 msgstr "aus"
@@ -3787,35 +3983,32 @@ 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 "Zeiteinheiten (TUs / 1024 ms) [1000-65535]"
+
 msgid "unknown"
 msgstr "unbekannt"
 
@@ -3837,6 +4030,66 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s W-LAN Adapter"
+
+#~ msgid "Background Scan"
+#~ msgstr "Hintergrundscan"
+
+#~ msgid "Compression"
+#~ msgstr "Kompression"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Deaktiviere Hardware-Beacon Zeitgeber"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Scan-Anforderungen nicht beantworten"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Schnelle Frames"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Höchstübertragungsrate"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Mindestübertragungsrate"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicastrate"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Funkkanal für den Ausseneinsatz"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Geltungsbereich (Regulatory Domain)"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Separates WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Statisches WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo Modus"
+
+#~ msgid "XR Support"
+#~ msgstr "XR-Unterstützung"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr ""
 #~ "Erzeugt ein zusätzliches Netzwerk wenn diese Option nicht ausgewählt ist"
index 712b024..331d969 100644 (file)
@@ -52,12 +52,36 @@ msgstr "Φορτίο 1 λεπτού:"
 msgid "15 Minute Load:"
 msgstr "Φορτίο 15 λεπτών:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Φορτίο 5 λεπτών:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -128,6 +152,11 @@ msgstr "<abbr title=\"μέγιστο\">Μεγ.</abbr> πλήθος ταυτόχ
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -146,9 +175,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Υποστήριξη AR"
-
 msgid "ARP retry threshold"
 msgstr "Όριο επαναδοκιμών ARP"
 
@@ -397,15 +423,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Συνδεδεμένοι Σταθμοί"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Εξουσιοδότηση"
 
@@ -478,9 +498,6 @@ msgstr "Πίσω προς επισκόπηση"
 msgid "Back to scan results"
 msgstr "Πίσω στα αποτελέσματα σάρωσης"
 
-msgid "Background Scan"
-msgstr "Σάρωση Παρασκηνίου"
-
 msgid "Backup / Flash Firmware"
 msgstr "Αντίγραφο ασφαλείας / Εγγραφή FLASH Υλικολογισμικό"
 
@@ -651,8 +668,12 @@ msgstr "Εντολή"
 msgid "Common Configuration"
 msgstr "Κοινή Παραμετροποίηση"
 
-msgid "Compression"
-msgstr "Συμπίεση"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Παραμετροποίηση"
@@ -873,12 +894,12 @@ msgstr "Απενεργοποίηση ρυθμίσεων DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Απενεργοποίηση χρονιστή HW-Beacon"
-
 msgid "Disabled"
 msgstr "Απενεργοποιημένο"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Αγνόησε τις απαντήσεις ανοδικής ροής RFC1918"
 
@@ -921,9 +942,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr "Να μην στέλνονται απαντήσεις σε probes"
-
 msgid "Domain required"
 msgstr "Απαίτηση για όνομα τομέα"
 
@@ -1030,6 +1048,9 @@ msgstr "Ενεργοποίηση λειτουργίας VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Ένεργοποίηση learning and aging"
 
@@ -1054,6 +1075,11 @@ msgstr "Ενεργοποίηση/Απενεργοποίηση"
 msgid "Enabled"
 msgstr "Ενεργοποιημένο"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1103,6 +1129,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Εξωτερικός εξυπηρετητής καταγραφής συστήματος"
 
@@ -1115,9 +1147,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Γρήγορα Πλαίσια"
-
 msgid "File"
 msgstr "Αρχείο"
 
@@ -1153,6 +1182,9 @@ msgstr "Τέλος"
 msgid "Firewall"
 msgstr "Τείχος Προστασίας"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Ρυθμίσεις Τείχους Προστασίας"
 
@@ -1199,6 +1231,9 @@ msgstr "Επιβολή TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Επιβολή TKIP και CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1445,9 +1480,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1460,7 +1501,7 @@ msgstr ""
 msgid "Identity"
 msgstr "Ταυτότητα"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1552,6 +1593,9 @@ msgstr "Εγκατεστημένα πακέτα"
 msgid "Interface"
 msgstr "Διεπαφή"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Παραμετροποίηση Διεπαφής"
 
@@ -1597,6 +1641,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Άκυρο όνομα χρήστη και/ή κωδικός πρόσβασης! Παρακαλώ προσπαθήστε ξανά."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1605,8 +1652,8 @@ msgstr ""
 "Φαίνεται πως προσπαθείτε να φλασάρετε μια εικόνα που δεν χωράει στην μνήμη "
 "flash, παρακαλώ επιβεβαιώστε το αρχείο εικόνας!"
 
-msgid "Java Script required!"
-msgstr "Απαιτείται Javascript!"
+msgid "JavaScript required!"
+msgstr "Απαιτείται JavaScript!"
 
 msgid "Join Network"
 msgstr ""
@@ -1674,9 +1721,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Αρχείο Leases"
 
-msgid "Leasetime"
-msgstr "Χρόνος Lease"
-
 msgid "Leasetime remaining"
 msgstr "Υπόλοιπο χρόνου Lease"
 
@@ -1718,6 +1762,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1850,9 +1910,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Μέγιστος Ρυθμός"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Μέγιστος επιτρεπόμενος αριθμός ενεργών DHCP leases"
 
@@ -1889,9 +1946,6 @@ msgstr "Χρήση Μνήμης (%)"
 msgid "Metric"
 msgstr "Μέτρο"
 
-msgid "Minimum Rate"
-msgstr "Ελάχιστος Ρυθμός"
-
 msgid "Minimum hold time"
 msgstr "Ελάχιστος χρόνος κράτησης"
 
@@ -1904,6 +1958,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Λειτουργία"
 
@@ -1963,9 +2020,6 @@ msgstr "Μετακίνηση κάτω"
 msgid "Move up"
 msgstr "Μετακίνηση πάνω"
 
-msgid "Multicast Rate"
-msgstr "Ρυθμός Multicast"
-
 msgid "Multicast address"
 msgstr "Διεύθυνση Multicast"
 
@@ -1978,6 +2032,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2158,18 +2215,30 @@ msgstr "Η επιλογή άλλαξε"
 msgid "Option removed"
 msgstr "Η επιλογή αφαιρέθηκε"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2206,9 +2275,6 @@ msgstr "Έξοδος"
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr "Εξωτερικά Κανάλια"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2256,6 +2322,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2313,6 +2382,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Ο κωδικός πρόσβασης άλλαξε επιτυχώς!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Διαδρομή για Πιστοποιητικό CA"
 
@@ -2385,6 +2457,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2451,6 +2532,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2532,6 +2619,9 @@ msgstr "Κίνηση πραγματικού χρόνου"
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2562,9 +2652,6 @@ msgstr "Επανασύνδεση της διεπαφής"
 msgid "References"
 msgstr "Αναφορές"
 
-msgid "Regulatory Domain"
-msgstr "Ρυθμιστική Περιοχή"
-
 msgid "Relay"
 msgstr ""
 
@@ -2604,19 +2691,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2760,9 +2855,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Απομόνωση Πελατών"
 
-msgid "Separate WDS"
-msgstr "Ξεχωριστά WDS"
-
 msgid "Server Settings"
 msgstr "Ρυθμίσεις Εξυπηρετητή"
 
@@ -2786,6 +2878,11 @@ msgstr "Είδος Υπηρεσίας"
 msgid "Services"
 msgstr "Υπηρεσίες"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2922,9 +3019,6 @@ msgstr "Στατικά Leases"
 msgid "Static Routes"
 msgstr "Στατικές Διαδρομές"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr "Στατική διεύθυνση"
 
@@ -3309,9 +3403,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Λειτουργία Turbo"
-
 msgid "Tx-Power"
 msgstr "Ισχύς Εκπομπής"
 
@@ -3434,6 +3525,11 @@ msgstr "Σε χρήση"
 msgid "Used Key Slot"
 msgstr "Χρησιμοποιούμενη Υποδοχή Κλειδιού"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3584,9 +3680,6 @@ msgstr "Καταγραφή των ληφθέντων DNS αιτήσεων στο
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Υποστήριξη XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3598,7 +3691,7 @@ msgstr ""
 "όπως το \"network\", η συσκευή σας μπορεί να καταστεί μη-προσβάσιμη!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3613,10 +3706,6 @@ msgstr ""
 msgid "auto"
 msgstr "αυτόματα"
 
-#, fuzzy
-msgid "automatic"
-msgstr "στατικό"
-
 msgid "baseT"
 msgstr ""
 
@@ -3691,7 +3780,7 @@ msgstr "τοπικό αρχείο <abbr title=\"Domain Name System\">DNS</abbr>"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3727,12 +3816,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3745,6 +3828,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3766,6 +3852,55 @@ msgstr "ναι"
 msgid "« Back"
 msgstr "« Πίσω"
 
+#~ msgid "Leasetime"
+#~ msgstr "Χρόνος Lease"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "στατικό"
+
+#~ msgid "AR Support"
+#~ msgstr "Υποστήριξη AR"
+
+#~ msgid "Background Scan"
+#~ msgstr "Σάρωση Παρασκηνίου"
+
+#~ msgid "Compression"
+#~ msgstr "Συμπίεση"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Απενεργοποίηση χρονιστή HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Να μην στέλνονται απαντήσεις σε probes"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Γρήγορα Πλαίσια"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Μέγιστος Ρυθμός"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Ελάχιστος Ρυθμός"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Ρυθμός Multicast"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Εξωτερικά Κανάλια"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Ρυθμιστική Περιοχή"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Ξεχωριστά WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Λειτουργία Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Υποστήριξη XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Ένα επιπλέον δίκτυο θα δημιουργηθεί εάν αυτό αφεθεί κενό"
 
index 2d8e786..978f15d 100644 (file)
@@ -52,12 +52,36 @@ msgstr "1 Minute Load:"
 msgid "15 Minute Load:"
 msgstr "15 Minute Load:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "5 Minute Load:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -128,6 +152,11 @@ msgstr "<abbr title=\"maximal\">Max.</abbr> concurrent queries"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -146,9 +175,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR Support"
-
 msgid "ARP retry threshold"
 msgstr "ARP retry threshold"
 
@@ -388,15 +414,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Associated Stations"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentication"
 
@@ -469,9 +489,6 @@ msgstr "Back to overview"
 msgid "Back to scan results"
 msgstr "Back to scan results"
 
-msgid "Background Scan"
-msgstr "Background Scan"
-
 msgid "Backup / Flash Firmware"
 msgstr "Backup / Flash Firmware"
 
@@ -638,8 +655,12 @@ msgstr "Command"
 msgid "Common Configuration"
 msgstr "Common Configuration"
 
-msgid "Compression"
-msgstr "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuration"
@@ -859,12 +880,12 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Disable HW-Beacon timer"
-
 msgid "Disabled"
 msgstr "Disabled"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
 
@@ -903,9 +924,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr "Do not send probe responses"
-
 msgid "Domain required"
 msgstr "Domain required"
 
@@ -1009,6 +1027,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1033,6 +1054,11 @@ msgstr "Enable/Disable"
 msgid "Enabled"
 msgstr "Enabled"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Enables the Spanning Tree Protocol on this bridge"
 
@@ -1079,6 +1105,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1091,9 +1123,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Fast Frames"
-
 msgid "File"
 msgstr ""
 
@@ -1129,6 +1158,9 @@ msgstr ""
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Firewall Settings"
 
@@ -1174,6 +1206,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1419,9 +1454,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1434,7 +1475,7 @@ msgstr ""
 msgid "Identity"
 msgstr "Identity"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1521,6 +1562,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1566,6 +1610,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Invalid username and/or password! Please try again."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1574,7 +1621,7 @@ msgstr ""
 "It appears that you try to flash an image that does not fit into the flash "
 "memory, please verify the image file!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1643,9 +1690,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Leasefile"
 
-msgid "Leasetime"
-msgstr "Leasetime"
-
 msgid "Leasetime remaining"
 msgstr "Leasetime remaining"
 
@@ -1687,6 +1731,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1819,9 +1879,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Maximum Rate"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1857,9 +1914,6 @@ msgstr "Memory usage (%)"
 msgid "Metric"
 msgstr "Metric"
 
-msgid "Minimum Rate"
-msgstr "Minimum Rate"
-
 msgid "Minimum hold time"
 msgstr "Minimum hold time"
 
@@ -1872,6 +1926,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mode"
 
@@ -1930,9 +1987,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr "Multicast Rate"
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1945,6 +1999,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2125,18 +2182,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2173,9 +2242,6 @@ msgstr "Out"
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr "Outdoor Channels"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2223,6 +2289,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2280,6 +2349,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Path to CA-Certificate"
 
@@ -2352,6 +2424,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2417,6 +2498,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2498,6 +2585,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2528,9 +2618,6 @@ msgstr ""
 msgid "References"
 msgstr "References"
 
-msgid "Regulatory Domain"
-msgstr "Regulatory Domain"
-
 msgid "Relay"
 msgstr ""
 
@@ -2570,19 +2657,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2724,9 +2819,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Separate Clients"
 
-msgid "Separate WDS"
-msgstr "Separate WDS"
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2750,6 +2842,11 @@ msgstr ""
 msgid "Services"
 msgstr "Services"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2884,9 +2981,6 @@ msgstr "Static Leases"
 msgid "Static Routes"
 msgstr "Static Routes"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3266,9 +3360,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Turbo Mode"
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3391,6 +3482,11 @@ msgstr "Used"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3543,9 +3639,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "XR Support"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3556,7 +3649,7 @@ msgstr ""
 "scripts like \"network\", your device might become inaccessible!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3571,9 +3664,6 @@ msgstr ""
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatic"
-
 msgid "baseT"
 msgstr ""
 
@@ -3647,7 +3737,7 @@ msgstr "local <abbr title=\"Domain Name System\">DNS</abbr> file"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3683,12 +3773,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3701,6 +3785,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3722,6 +3809,54 @@ msgstr ""
 msgid "« Back"
 msgstr "« Back"
 
+#~ msgid "Leasetime"
+#~ msgstr "Leasetime"
+
+#~ msgid "automatic"
+#~ msgstr "automatic"
+
+#~ msgid "AR Support"
+#~ msgstr "AR Support"
+
+#~ msgid "Background Scan"
+#~ msgstr "Background Scan"
+
+#~ msgid "Compression"
+#~ msgstr "Compression"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Disable HW-Beacon timer"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Do not send probe responses"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Fast Frames"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Maximum Rate"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Minimum Rate"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicast Rate"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Outdoor Channels"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Regulatory Domain"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Separate WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo Mode"
+
+#~ msgid "XR Support"
+#~ msgstr "XR Support"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "An additional network will be created if you leave this unchecked."
 
index ba29280..5d2fac2 100644 (file)
@@ -52,12 +52,36 @@ msgstr "Carga a 1 minuto:"
 msgid "15 Minute Load:"
 msgstr "Carga a 15 minutos:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Carga a 5 minutos:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 "<abbr title=\"Identificador de conjunto de servicios básicos\">BSSID</abbr>"
@@ -130,6 +154,11 @@ msgstr "Máximo número de consultas concurrentes"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Grupo: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -148,9 +177,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Soporte a AR"
-
 msgid "ARP retry threshold"
 msgstr "Umbral de reintento ARP"
 
@@ -394,15 +420,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Estaciones asociadas"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Controlador inalámbrico 802.11%s Atheros"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentificación"
 
@@ -475,9 +495,6 @@ msgstr "Volver al resumen"
 msgid "Back to scan results"
 msgstr "Volver a resultados de la exploración"
 
-msgid "Background Scan"
-msgstr "Exploración en segundo plano"
-
 msgid "Backup / Flash Firmware"
 msgstr "Copia de seguridad / Grabar firmware"
 
@@ -647,8 +664,12 @@ msgstr "Comando"
 msgid "Common Configuration"
 msgstr "Configuración común"
 
-msgid "Compression"
-msgstr "Compresión"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuración"
@@ -870,12 +891,12 @@ msgstr "Desactivar configuración de DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Desactivar el temporizador de baliza hardware"
-
 msgid "Disabled"
 msgstr "Desactivar"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Descartar respuestas RFC1918 salientes"
 
@@ -916,9 +937,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "No retransmitir búsquedas inversas para redes locales"
 
-msgid "Do not send probe responses"
-msgstr "No enviar respuestas de prueba"
-
 msgid "Domain required"
 msgstr "Dominio requerido"
 
@@ -1024,6 +1042,9 @@ msgstr "Activar funcionalidad VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Activar aprendizaje y envejecimiento"
 
@@ -1048,6 +1069,11 @@ msgstr "Activar/Desactivar"
 msgid "Enabled"
 msgstr "Activado"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Activa el protocol STP en este puente"
 
@@ -1097,6 +1123,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Servidor externo de registro del sistema"
 
@@ -1109,9 +1141,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Tramas rápidas"
-
 msgid "File"
 msgstr "Fichero"
 
@@ -1147,6 +1176,9 @@ msgstr "Terminar"
 msgid "Firewall"
 msgstr "Cortafuegos"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Configuración del cortafuegos"
 
@@ -1192,6 +1224,9 @@ msgstr "Forzar TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forzar TKIP y CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1441,9 +1476,15 @@ msgstr "Longitud de prefijo IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Dirección IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-en-IPv4 (RFC4213)"
 
@@ -1456,7 +1497,7 @@ msgstr "IPv6-sobre-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identidad"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1550,6 +1591,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"
 
@@ -1596,6 +1640,9 @@ msgid "Invalid username and/or password! Please try again."
 msgstr ""
 "¡Nombre de usuario o contraseña no válidos!. Pruebe de nuevo, por favor."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1604,7 +1651,7 @@ msgstr ""
 "Parece que está intentando grabar una imagen de firmware mayor que la "
 "memoria flash de su equipo. ¡Por favor, verifique el archivo!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "¡Se necesita JavaScript!"
 
 msgid "Join Network"
@@ -1673,9 +1720,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"
 
@@ -1719,6 +1763,22 @@ msgstr ""
 "Lista de servidores <abbr title=\"Domain Name System\">DNS</abbr> a los que "
 "enviar solicitudes"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1858,9 +1918,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Ratio Máximo"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Número máximo de cesiones DHCP activas"
 
@@ -1896,9 +1953,6 @@ msgstr "Uso de memoria (%)"
 msgid "Metric"
 msgstr "Métrica"
 
-msgid "Minimum Rate"
-msgstr "Ratio mínimo"
-
 msgid "Minimum hold time"
 msgstr "Pausa mínima de espera"
 
@@ -1911,6 +1965,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Extensión de protocolo faltante para %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Modo"
 
@@ -1969,9 +2026,6 @@ msgstr "Bajar"
 msgid "Move up"
 msgstr "Subir"
 
-msgid "Multicast Rate"
-msgstr "Ratio multicast"
-
 msgid "Multicast address"
 msgstr "Dirección multicast"
 
@@ -1984,6 +2038,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2163,18 +2220,30 @@ msgstr "Opción cambiada"
 msgid "Option removed"
 msgstr "Opción eliminada"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2211,9 +2280,6 @@ msgstr "Salida"
 msgid "Outbound:"
 msgstr "Saliente:"
 
-msgid "Outdoor Channels"
-msgstr "Canales al aire libre"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2263,6 +2329,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2320,6 +2389,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "¡Contraseña cambiada!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Ruta al Certificado CA"
 
@@ -2392,6 +2464,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2459,6 +2540,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Calidad"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2552,6 +2639,9 @@ msgstr "Tráfico en tiempo real"
 msgid "Realtime Wireless"
 msgstr "Red inalámbrica en tiempo real"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Protección contra reasociación"
 
@@ -2582,9 +2672,6 @@ msgstr "Reconectando la interfaz"
 msgid "References"
 msgstr "Referencias"
 
-msgid "Regulatory Domain"
-msgstr "Dominio Regulador"
-
 msgid "Relay"
 msgstr "Relé"
 
@@ -2624,19 +2711,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Necesario para ciertos ISPs, por ejemplo Charter con DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2780,9 +2875,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Aislar clientes"
 
-msgid "Separate WDS"
-msgstr "WDS aislado"
-
 msgid "Server Settings"
 msgstr "Configuración del servidor"
 
@@ -2806,6 +2898,11 @@ msgstr "Tipo de servicio"
 msgid "Services"
 msgstr "Servicios"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Sincronización horaria"
@@ -2949,9 +3046,6 @@ msgstr "Cesiones estáticas"
 msgid "Static Routes"
 msgstr "Rutas estáticas"
 
-msgid "Static WDS"
-msgstr "WDS estático"
-
 msgid "Static address"
 msgstr "Dirección estática"
 
@@ -3375,9 +3469,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Modo Turbo"
-
 msgid "Tx-Power"
 msgstr "Potencia-TX"
 
@@ -3507,6 +3598,11 @@ msgstr "Usado"
 msgid "Used Key Slot"
 msgstr "Espacio de clave usado"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3659,9 +3755,6 @@ msgstr "Escribir las peticiones de DNS recibidas en el registro del sistema"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Soporte de XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3673,9 +3766,9 @@ msgstr ""
 "inaccesible!.</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Debe activar Javascript en su navegador o LuCI no funcionará correctamente."
+"Debe activar JavaScript en su navegador o LuCI no funcionará correctamente."
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3689,10 +3782,6 @@ msgstr "cualquiera"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3766,7 +3855,7 @@ msgstr "Archvo <abbr title=\"Domain Name System\">DNS</abbr> local"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3802,12 +3891,6 @@ msgstr "enrutado"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3820,6 +3903,9 @@ msgstr ""
 msgid "tagged"
 msgstr "marcado"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "desconocido"
 
@@ -3841,6 +3927,61 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Controlador inalámbrico 802.11%s Atheros"
+
+#~ msgid "Background Scan"
+#~ msgstr "Exploración en segundo plano"
+
+#~ msgid "Compression"
+#~ msgstr "Compresión"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Desactivar el temporizador de baliza hardware"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "No enviar respuestas de prueba"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Tramas rápidas"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Ratio Máximo"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Ratio mínimo"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Ratio multicast"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Canales al aire libre"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Dominio Regulador"
+
+#~ msgid "Separate WDS"
+#~ msgstr "WDS aislado"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS estático"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Modo Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Soporte de XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Se creará una red adicional si deja esto desmarcado."
 
index fa25948..ee4f0fb 100644 (file)
@@ -52,12 +52,36 @@ msgstr "Charge sur 1 minute :"
 msgid "15 Minute Load:"
 msgstr "Charge sur 15 minutes :"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Charge sur 5 minutes :"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -129,6 +153,11 @@ msgstr "Maximum de requêtes concurrentes"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -147,9 +176,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Gestion du mode AR"
-
 msgid "ARP retry threshold"
 msgstr "Niveau de ré-essai ARP"
 
@@ -400,15 +426,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Équipements associés"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Contrôleur sans fil Atheros 802.11%s "
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentification"
 
@@ -481,9 +501,6 @@ msgstr "Retour à la vue générale"
 msgid "Back to scan results"
 msgstr "Retour aux résultats de la recherche"
 
-msgid "Background Scan"
-msgstr "Recherche en arrière-plan"
-
 msgid "Backup / Flash Firmware"
 msgstr "Sauvegarde / Mise à jour du micrologiciel"
 
@@ -654,8 +671,12 @@ msgstr "Commande"
 msgid "Common Configuration"
 msgstr "Configuration commune"
 
-msgid "Compression"
-msgstr "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuration"
@@ -877,12 +898,12 @@ msgstr "Désactiver la configuration DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Désactiver l'émission périodique de balises wifi (« HW-Beacon »)"
-
 msgid "Disabled"
 msgstr "Désactivé"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Jeter les réponses en RFC1918 amont"
 
@@ -926,9 +947,6 @@ msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 "Ne pas transmettre les requêtes de recherche inverse pour les réseaux locaux"
 
-msgid "Do not send probe responses"
-msgstr "Ne pas envoyer de réponses de test"
-
 msgid "Domain required"
 msgstr "Domaine nécessaire"
 
@@ -1034,6 +1052,9 @@ msgstr "Acviter la gestion des VLANs"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Activer l'apprentissage et la péremption"
 
@@ -1058,6 +1079,11 @@ msgstr "Activer/Désactiver"
 msgid "Enabled"
 msgstr "Activé"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 "Activer le protocole <abbr title=\"Spanning Tree Protocol\">STP</abbr> sur "
@@ -1109,6 +1135,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Serveur distant de journaux système"
 
@@ -1121,9 +1153,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Trames rapides"
-
 msgid "File"
 msgstr "Fichier"
 
@@ -1159,6 +1188,9 @@ msgstr "Terminer"
 msgid "Firewall"
 msgstr "Pare-feu"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Paramètres du pare-feu"
 
@@ -1204,6 +1236,9 @@ msgstr "Forcer TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forcer TKIP et CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1453,9 +1488,15 @@ msgstr "longueur du préfixe IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adresse IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6 dans IPv4 (RFC 4213)"
 
@@ -1468,7 +1509,7 @@ msgstr "IPv6 sur IPv4 (6 vers 4)"
 msgid "Identity"
 msgstr "Identité"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1558,6 +1599,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"
 
@@ -1606,6 +1650,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Nom d'utilisateur et/ou mot de passe invalides ! Réessayez !"
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1615,7 +1662,7 @@ msgstr ""
 "tient pas dans sa mémoire flash, vérifiez s'il vous plait votre fichier-"
 "image !"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "Nécessite un Script Java !"
 
 msgid "Join Network"
@@ -1684,9 +1731,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é"
 
@@ -1730,6 +1774,22 @@ msgstr ""
 "Liste des serveurs auquels sont transmis les requêtes <abbr title=\"Domain "
 "Name System\">DNS</abbr>"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1872,9 +1932,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Débit maximum"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Nombre maximum de baux DHCP actifs"
 
@@ -1910,9 +1967,6 @@ msgstr "Utilisation Mémoire (%)"
 msgid "Metric"
 msgstr "Metrique"
 
-msgid "Minimum Rate"
-msgstr "Débit minimum"
-
 msgid "Minimum hold time"
 msgstr "Temps de maintien mimimum"
 
@@ -1925,6 +1979,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Extention de protocole manquante pour le proto %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mode"
 
@@ -1983,9 +2040,6 @@ msgstr "Descendre"
 msgid "Move up"
 msgstr "Monter"
 
-msgid "Multicast Rate"
-msgstr "Débit multidiffusion"
-
 msgid "Multicast address"
 msgstr "Adresse multidiffusion"
 
@@ -1998,6 +2052,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2176,18 +2233,30 @@ msgstr "Option modifiée"
 msgid "Option removed"
 msgstr "Option retirée"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2224,9 +2293,6 @@ msgstr "Sortie"
 msgid "Outbound:"
 msgstr "Extérieur :"
 
-msgid "Outdoor Channels"
-msgstr "Canaux en extérieur"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2276,6 +2342,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "code PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2333,6 +2402,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Mot de passe changé avec succès !"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Chemin de la CA"
 
@@ -2405,6 +2477,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2472,6 +2553,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Qualitée"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2565,6 +2652,9 @@ msgstr "Trafic temps-réel"
 msgid "Realtime Wireless"
 msgstr "Qualité de réception actuelle"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Protection contre l'attaque « rebind »"
 
@@ -2595,9 +2685,6 @@ msgstr "Reconnecte cet interface"
 msgid "References"
 msgstr "Références"
 
-msgid "Regulatory Domain"
-msgstr "Domaine de certification"
-
 msgid "Relay"
 msgstr "Relais"
 
@@ -2637,19 +2724,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Nécessaire avec certains FAIs, par ex. : Charter avec DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2794,9 +2889,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Isoler les clients"
 
-msgid "Separate WDS"
-msgstr "WDS séparé"
-
 msgid "Server Settings"
 msgstr "Paramètres du serveur"
 
@@ -2820,6 +2912,11 @@ msgstr "Type du service"
 msgid "Services"
 msgstr "Services"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Configurer la synchronisation de l'heure"
@@ -2961,9 +3058,6 @@ msgstr "Baux Statiques"
 msgid "Static Routes"
 msgstr "Routes statiques"
 
-msgid "Static WDS"
-msgstr "WDS statique"
-
 msgid "Static address"
 msgstr "Adresse statique"
 
@@ -3393,9 +3487,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Mode Turbo"
-
 msgid "Tx-Power"
 msgstr "Puissance d'émission"
 
@@ -3526,6 +3617,11 @@ msgstr "Utilisé"
 msgid "Used Key Slot"
 msgstr "Clé utilisée"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3678,9 +3774,6 @@ msgstr "Écrire les requêtes DNS reçues dans syslog"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Gestion du mode XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3692,10 +3785,10 @@ msgstr ""
 "\", votre équipement pourrait ne plus être accessible&#160;!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Vous devez activer Java Script dans votre navigateur pour que LuCI "
-"fonctionne correctement."
+"Vous devez activer JavaScript dans votre navigateur pour que LuCI fonctionne "
+"correctement."
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3709,10 +3802,6 @@ msgstr "n'importe lequel"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "statique"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3784,7 +3873,7 @@ msgstr "fichier de résolution local"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3820,12 +3909,6 @@ msgstr "routé"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3838,6 +3921,9 @@ msgstr ""
 msgid "tagged"
 msgstr "marqué"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "inconnu"
 
@@ -3859,6 +3945,61 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Contrôleur sans fil Atheros 802.11%s "
+
+#~ msgid "Background Scan"
+#~ msgstr "Recherche en arrière-plan"
+
+#~ msgid "Compression"
+#~ msgstr "Compression"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Désactiver l'émission périodique de balises wifi (« HW-Beacon »)"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Ne pas envoyer de réponses de test"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Trames rapides"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Débit maximum"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Débit minimum"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Débit multidiffusion"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Canaux en extérieur"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domaine de certification"
+
+#~ msgid "Separate WDS"
+#~ msgstr "WDS séparé"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS statique"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Mode Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Gestion du mode XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Un réseau supplémentaire sera créé si vous laissé ceci décoché."
 
index 3be9429..7a0b518 100644 (file)
@@ -50,12 +50,36 @@ msgstr "עומס במשך דקה:"
 msgid "15 Minute Load:"
 msgstr "עומס במשך רבע שעה:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "עומס במשך 5 דקות:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 
@@ -119,6 +143,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -137,9 +166,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr "תמיכת AR"
-
 #, fuzzy
 msgid "ARP retry threshold"
 msgstr "סף נסיונות של ARP"
@@ -389,15 +415,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "תחנות קשורות"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "שלט אלחוטי Atheros 802.11%s"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "אימות"
 
@@ -470,9 +490,6 @@ msgstr "חזרה לסקירה"
 msgid "Back to scan results"
 msgstr "חזרה לתוצאות סריקה"
 
-msgid "Background Scan"
-msgstr "סריקת רקע"
-
 msgid "Backup / Flash Firmware"
 msgstr "גיבוי / קושחת פלאש"
 
@@ -631,8 +648,12 @@ msgstr "פקודה"
 msgid "Common Configuration"
 msgstr "הגדרות נפוצות"
 
-msgid "Compression"
-msgstr "דחיסה"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "הגדרות"
@@ -851,10 +872,10 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
+msgid "Disabled"
 msgstr ""
 
-msgid "Disabled"
+msgid "Disabled (default)"
 msgstr ""
 
 msgid "Discard upstream RFC1918 responses"
@@ -891,9 +912,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr ""
 
@@ -994,6 +1012,9 @@ msgstr "אפשר תפקוד VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "אפשר למידה והזדקנות"
 
@@ -1018,6 +1039,11 @@ msgstr ""
 msgid "Enabled"
 msgstr "אפשר"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1064,6 +1090,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1076,9 +1108,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr ""
 
@@ -1114,6 +1143,9 @@ msgstr ""
 msgid "Firewall"
 msgstr ""
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr ""
 
@@ -1159,6 +1191,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1402,9 +1437,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1417,7 +1458,7 @@ msgstr ""
 msgid "Identity"
 msgstr ""
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1499,6 +1540,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1544,12 +1588,15 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "שם משתמש ו/או סיסמה שגויים! אנא נסה שנית."
 
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1618,9 +1665,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -1662,6 +1706,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1794,9 +1854,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1832,9 +1889,6 @@ msgstr ""
 msgid "Metric"
 msgstr ""
 
-msgid "Minimum Rate"
-msgstr ""
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1847,6 +1901,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr ""
 
@@ -1903,9 +1960,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr ""
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1918,6 +1972,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2092,18 +2149,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2140,9 +2209,6 @@ msgstr ""
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2190,6 +2256,9 @@ msgstr ""
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2247,6 +2316,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr ""
 
@@ -2319,6 +2391,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2384,6 +2465,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2466,6 +2553,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2496,9 +2586,6 @@ msgstr ""
 msgid "References"
 msgstr ""
 
-msgid "Regulatory Domain"
-msgstr ""
-
 msgid "Relay"
 msgstr ""
 
@@ -2538,19 +2625,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2690,9 +2785,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2716,6 +2808,11 @@ msgstr ""
 msgid "Services"
 msgstr "שירותים"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "סנכרון זמן"
@@ -2853,9 +2950,6 @@ msgstr "הקצאות סטטיות"
 msgid "Static Routes"
 msgstr "ניתובים סטטיים"
 
-msgid "Static WDS"
-msgstr "WDS סטטי"
-
 msgid "Static address"
 msgstr "כתובת סטטית"
 
@@ -3224,9 +3318,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr ""
-
 msgid "Tx-Power"
 msgstr "עוצמת שידור"
 
@@ -3349,6 +3440,11 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3499,9 +3595,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr ""
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3509,8 +3602,8 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
-msgstr "אתה חייב להפעיל את Java Script בדפדפן שלך; אחרת, LuCI לא יפעל כראוי."
+"You must enable JavaScript in your browser or LuCI will not work properly."
+msgstr "אתה חייב להפעיל את JavaScript בדפדפן שלך; אחרת, LuCI לא יפעל כראוי."
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3524,9 +3617,6 @@ msgstr "כלשהו"
 msgid "auto"
 msgstr "אוטומטי"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3598,7 +3688,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3634,12 +3724,6 @@ msgstr "מנותב"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3652,6 +3736,9 @@ msgstr ""
 msgid "tagged"
 msgstr "מתויג"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3673,6 +3760,21 @@ msgstr "כן"
 msgid "« Back"
 msgstr "<< אחורה"
 
+#~ msgid "AR Support"
+#~ msgstr "תמיכת AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "שלט אלחוטי Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "סריקת רקע"
+
+#~ msgid "Compression"
+#~ msgstr "דחיסה"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS סטטי"
+
 #, fuzzy
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "רשת נוספת תווצר אם תשאיר את זה לא מסומן"
index b0c8fa1..d74394e 100644 (file)
@@ -50,12 +50,36 @@ msgstr "Terhelés (utolsó 1 perc):"
 msgid "15 Minute Load:"
 msgstr "Terhelés (utolsó 15 perc):"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Terhelés (utolsó 5 perc):"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -126,6 +150,11 @@ msgstr "<abbr title=\"maximal\">Max.</abbr> párhuzamos lekérdezés"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -144,9 +173,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR Támogatás"
-
 msgid "ARP retry threshold"
 msgstr "ARP újrapróbálkozási küszöbérték"
 
@@ -393,15 +419,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Kapcsolódó kliensek"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s vezeték-nélküli vezérlő"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Hitelesítés"
 
@@ -474,9 +494,6 @@ msgstr "Vissza az áttekintéshez"
 msgid "Back to scan results"
 msgstr "Vissza a felderítési eredményekhez"
 
-msgid "Background Scan"
-msgstr "Felderítés a háttérben"
-
 msgid "Backup / Flash Firmware"
 msgstr "Mentés / Firmware frissítés"
 
@@ -649,8 +666,12 @@ msgstr "Parancs"
 msgid "Common Configuration"
 msgstr "Álatános beállítás"
 
-msgid "Compression"
-msgstr "Tömörítés"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Beállítás"
@@ -871,12 +892,12 @@ msgstr "DNS beállítás letiltása"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Hardveres beacon időzítő letiltása"
-
 msgid "Disabled"
 msgstr "Letiltva"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Beérkező RFC1918 DHCP válaszok elvetése. "
 
@@ -917,9 +938,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Ne továbbítson fordított keresési kéréseket a helyi hálózathoz"
 
-msgid "Do not send probe responses"
-msgstr "Ne válaszoljon a szondázásra"
-
 msgid "Domain required"
 msgstr "Tartomány szükséges"
 
@@ -1027,6 +1045,9 @@ msgstr "VLAN funkció engedélyezése"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Tanulás és aging engedélyezése"
 
@@ -1051,6 +1072,11 @@ msgstr "Engedélyezés/Letiltás"
 msgid "Enabled"
 msgstr "Engedélyezve"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "A Spanning Tree prokoll engedélyezése erre a hídra"
 
@@ -1098,6 +1124,12 @@ msgstr "A bérelt címek lejárati ideje, a minimális érték 2 perc."
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Külső rendszernapló kiszolgáló"
 
@@ -1110,9 +1142,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Gyors keretek"
-
 msgid "File"
 msgstr "Fájl"
 
@@ -1148,6 +1177,9 @@ msgstr "Befejezés"
 msgid "Firewall"
 msgstr "Tűzfal"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Tűzfal Beállítások"
 
@@ -1195,6 +1227,9 @@ msgstr "TKIP kényszerítése"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "TKIP és CCMP (AES) kényszerítése"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1442,9 +1477,15 @@ msgstr "IPv6 prefix hossz"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-cím"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6 IPv4-ben (RFC4213)"
 
@@ -1457,7 +1498,7 @@ msgstr "IPv6 IPv4 felett (6to4)"
 msgid "Identity"
 msgstr "Identitás"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1548,6 +1589,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"
 
@@ -1596,6 +1640,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Érvénytelen felhasználói név és/vagy jelszó! Kérem próbálja újra!"
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1604,8 +1651,8 @@ msgstr ""
 "Úgy tűnik, hogy a flash-elendő kép-file nem fér el a Flash-memóriába. Kérem "
 "ellenőrizze a kép fájlt!"
 
-msgid "Java Script required!"
-msgstr "Javascript szükséges!"
+msgid "JavaScript required!"
+msgstr "JavaScript szükséges!"
 
 msgid "Join Network"
 msgstr "Csatlakozás a hálózathoz"
@@ -1673,9 +1720,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ő"
 
@@ -1719,6 +1763,22 @@ msgstr ""
 "<abbr title=\"Domain Name System\">DNS</abbr> szerverek listája, ahová a "
 "kérések továbbításra kerülnek"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1861,9 +1921,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Maximális sebesség"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Aktív DHCP bérletek maximális száma"
 
@@ -1899,9 +1956,6 @@ msgstr "Memória használat (%)"
 msgid "Metric"
 msgstr "Metrika"
 
-msgid "Minimum Rate"
-msgstr "Minimális sebesség"
-
 msgid "Minimum hold time"
 msgstr "Minimális tartási idő"
 
@@ -1914,6 +1968,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Hiányzó protokoll kiterjesztés a %q progokoll számára"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mód"
 
@@ -1972,9 +2029,6 @@ msgstr "Mozgatás lefelé"
 msgid "Move up"
 msgstr "Mozgatás felfelé"
 
-msgid "Multicast Rate"
-msgstr "Multicast sebesség"
-
 msgid "Multicast address"
 msgstr "Multicast cím"
 
@@ -1987,6 +2041,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2166,18 +2223,30 @@ msgstr "Beállítás módosítva"
 msgid "Option removed"
 msgstr "Beállítás eltávolítva"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2214,9 +2283,6 @@ msgstr "Ki"
 msgid "Outbound:"
 msgstr "Kimenő:"
 
-msgid "Outdoor Channels"
-msgstr "Kültéri csatornák"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2266,6 +2332,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2323,6 +2392,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "A jelszó megváltoztatása sikeres!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "CA tanúsítvány elérési útja"
 
@@ -2395,6 +2467,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2462,6 +2543,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Minőség"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2556,6 +2643,9 @@ msgstr "Valósidejű forgalom"
 msgid "Realtime Wireless"
 msgstr "Valósidejű vezetéknélküli adatok"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Rebind elleni védelem"
 
@@ -2586,9 +2676,6 @@ msgstr "Interfész újracsatlakoztatása"
 msgid "References"
 msgstr "Hivatkozások"
 
-msgid "Regulatory Domain"
-msgstr "Szabályozó tartomány"
-
 msgid "Relay"
 msgstr "Átjátszás"
 
@@ -2628,6 +2715,9 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 "Szükséges bizonyos internetszolgáltatók esetén, pl. Charter 'DOCSIS 3'-al"
@@ -2635,13 +2725,18 @@ msgstr ""
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2785,9 +2880,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Kliensek szétválasztása"
 
-msgid "Separate WDS"
-msgstr "WDS szétválasztása"
-
 msgid "Server Settings"
 msgstr "Kiszolgáló beállításai"
 
@@ -2811,6 +2903,11 @@ msgstr "Szolgáltatás típusa"
 msgid "Services"
 msgstr "Szolgáltatások"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Idő szinkronizálás beállítása"
@@ -2952,9 +3049,6 @@ msgstr "Statikus bérletek"
 msgid "Static Routes"
 msgstr "Statikus útvonalak"
 
-msgid "Static WDS"
-msgstr "Statikus WDS"
-
 msgid "Static address"
 msgstr "Statikus cím"
 
@@ -3381,9 +3475,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Turbó mód"
-
 msgid "Tx-Power"
 msgstr "Adóteljesítmény"
 
@@ -3513,6 +3604,11 @@ msgstr "Használt"
 msgid "Used Key Slot"
 msgstr "Használt kulcsindex"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3665,9 +3761,6 @@ msgstr "A kapott DNS kéréseket írja a rendszernaplóba"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "XR támogatás"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3679,7 +3772,7 @@ msgstr ""
 "esetén, az eszköz elérhetetlenné válhat!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 "Engélyezze a Java Szkripteket a böngészőjében, mert anélkül a LuCI nem fog "
 "megfelelően működni."
@@ -3696,9 +3789,6 @@ msgstr "bármelyik"
 msgid "auto"
 msgstr "automatikus"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3772,7 +3862,7 @@ msgstr "helyi <abbr title=\"Domain Name System\">DNS</abbr> fájl"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3808,12 +3898,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 ""
 
@@ -3826,6 +3910,9 @@ msgstr ""
 msgid "tagged"
 msgstr "cimkézett"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "ismeretlen"
 
@@ -3847,6 +3934,57 @@ msgstr "igen"
 msgid "« Back"
 msgstr "« Vissza"
 
+#~ msgid "Leasetime"
+#~ msgstr "Bérlet időtartama"
+
+#~ msgid "AR Support"
+#~ msgstr "AR Támogatás"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s vezeték-nélküli vezérlő"
+
+#~ msgid "Background Scan"
+#~ msgstr "Felderítés a háttérben"
+
+#~ msgid "Compression"
+#~ msgstr "Tömörítés"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Hardveres beacon időzítő letiltása"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Ne válaszoljon a szondázásra"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Gyors keretek"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Maximális sebesség"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Minimális sebesség"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicast sebesség"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Kültéri csatornák"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Szabályozó tartomány"
+
+#~ msgid "Separate WDS"
+#~ msgstr "WDS szétválasztása"
+
+#~ msgid "Static WDS"
+#~ msgstr "Statikus WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbó mód"
+
+#~ msgid "XR Support"
+#~ msgstr "XR támogatás"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Amennyiben ezt jelöletlenül hagyja, egy további hálózat jön létre"
 
index 0519605..f013489 100644 (file)
@@ -3,8 +3,8 @@ msgstr ""
 "Project-Id-Version: LuCI\n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2015-04-20 10:33+0100\n"
-"Last-Translator: muxator <a.mux@inwind.it>\n"
+"PO-Revision-Date: 2017-09-05 00:33+0100\n"
+"Last-Translator: bubu83 <bubu83@gmail.com>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
 "Language: it\n"
 "MIME-Version: 1.0\n"
@@ -52,12 +52,36 @@ msgstr "Carico in 1 minuto:"
 msgid "15 Minute Load:"
 msgstr "Carico in 15 minut:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Carico in 5 minuti:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 "<abbr title=\"Servizio basilare di impostazione Identificatore\">BSSID</abbr>"
@@ -131,6 +155,13 @@ msgstr "<abbr title=\"maximal\">Max.</abbr> Richiesta in uso"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Accoppiata: %s / Gruppo: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+"<br/>Nota: devi riavviare manualmente il servizio cron se il file crontab "
+"era vuoto prima delle modifiche."
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -149,9 +180,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Supporto AR"
-
 msgid "ARP retry threshold"
 msgstr "riprova soglia ARP"
 
@@ -214,10 +242,10 @@ msgid "Active Connections"
 msgstr "Connessioni attive"
 
 msgid "Active DHCP Leases"
-msgstr "Attiva contratti DHCP"
+msgstr "Contratti attivi DHCP"
 
 msgid "Active DHCPv6 Leases"
-msgstr "Attiva contratti DHCPv6"
+msgstr "Contratti attivi DHCPv6"
 
 msgid "Ad-Hoc"
 msgstr "Ad-Hoc"
@@ -254,7 +282,7 @@ msgid "Aggregate Transmit Power(ACTATP)"
 msgstr ""
 
 msgid "Alert"
-msgstr "Avviso"
+msgstr "Allerta"
 
 msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
@@ -400,15 +428,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Dispositivi Wi-Fi connessi"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Dispositivo Wireless Atheros 802.11%s"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticazione PEAP"
 
@@ -425,28 +447,28 @@ msgid "Auto Refresh"
 msgstr "Aggiornamento Automatico"
 
 msgid "Automatic"
-msgstr ""
+msgstr "Automatico"
 
 msgid "Automatic Homenet (HNCP)"
-msgstr ""
+msgstr "Homenet (HNCP) automatico"
 
 msgid "Automatically check filesystem for errors before mounting"
-msgstr ""
+msgstr "Controlla automaticamente il filesystem per errori prima di montare"
 
 msgid "Automatically mount filesystems on hotplug"
-msgstr ""
+msgstr "Monta automaticamente i filesystem in hotplug"
 
 msgid "Automatically mount swap on hotplug"
-msgstr ""
+msgstr "Monta automaticamente lo swap in hotplug"
 
 msgid "Automount Filesystem"
-msgstr ""
+msgstr "Automonta Filesystem"
 
 msgid "Automount Swap"
-msgstr ""
+msgstr "Automonta Swap"
 
 msgid "Available"
-msgstr "Disponibili"
+msgstr "Disponibile"
 
 msgid "Available packages"
 msgstr "Pacchetti disponibili"
@@ -481,9 +503,6 @@ msgstr "Ritorna alla panoramica"
 msgid "Back to scan results"
 msgstr "Ritorno ai risultati della scansione"
 
-msgid "Background Scan"
-msgstr "Scansione in background"
-
 msgid "Backup / Flash Firmware"
 msgstr "Copia di Sicurezza / Flash Firmware"
 
@@ -565,7 +584,7 @@ msgid "Cancel"
 msgstr "Annulla"
 
 msgid "Category"
-msgstr ""
+msgstr "Categoria"
 
 msgid "Chain"
 msgstr "Catena"
@@ -586,10 +605,10 @@ msgid "Check"
 msgstr "Verifica"
 
 msgid "Check fileystems before mount"
-msgstr ""
+msgstr "Controlla i filesystem prima di montare"
 
 msgid "Check this option to delete the existing networks from this radio."
-msgstr ""
+msgstr "Marca questa opzione per cancellare le reti esistenti da questa radio."
 
 msgid "Checksum"
 msgstr "Checksum"
@@ -609,7 +628,7 @@ 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 ""
-"Segliere la/le rete/reti a cui vuoi collegare questa interfaccia wireless o "
+"Scegliere la/le rete/reti a cui vuoi collegare questa interfaccia wireless o "
 "riempire il campo <em>crea<em> per definire una nuova rete."
 
 msgid "Cipher"
@@ -625,7 +644,7 @@ msgid ""
 msgstr ""
 "Premi su \"Genera archivio\" per scaricare un archivio tar di backup dei "
 "file di configurazione attuali. Per ripristinare il firmware al suo stato "
-"iniziale premi \"Esegui RIpristino\" (solo per firmware basati su squashfs)."
+"iniziale premi \"Esegui Ripristino\" (solo per firmware basati su squashfs)."
 
 msgid "Client"
 msgstr "Cliente"
@@ -652,8 +671,12 @@ msgstr "Comando"
 msgid "Common Configuration"
 msgstr "Configurazioni Comuni"
 
-msgid "Compression"
-msgstr "Compressione"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configurazione"
@@ -701,7 +724,7 @@ msgid "Create Interface"
 msgstr "Crea Interfaccia"
 
 msgid "Create a bridge over multiple interfaces"
-msgstr "Crea un ponte tra interfaccie multiple"
+msgstr "Crea un ponte tra interfacce multiple"
 
 msgid "Critical"
 msgstr "Critico"
@@ -731,7 +754,7 @@ msgstr ""
 "abbr> del sistema se possibile."
 
 msgid "DHCP Leases"
-msgstr "Contratta DHCP"
+msgstr "Contratti DHCP"
 
 msgid "DHCP Server"
 msgstr "Server DHCP"
@@ -740,16 +763,16 @@ msgid "DHCP and DNS"
 msgstr "DHCP e DNS"
 
 msgid "DHCP client"
-msgstr "Client DHCP"
+msgstr "Cliente DHCP"
 
 msgid "DHCP-Options"
 msgstr "Opzioni DHCP"
 
 msgid "DHCPv6 Leases"
-msgstr "Locazioni DHCPv6"
+msgstr "Contratti DHCPv6"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "Cliente DHCPv6"
 
 msgid "DHCPv6-Mode"
 msgstr ""
@@ -833,7 +856,7 @@ msgid "Description"
 msgstr "Descrizione"
 
 msgid "Design"
-msgstr "Disegno"
+msgstr "Tema"
 
 msgid "Destination"
 msgstr "Destinazione"
@@ -845,10 +868,10 @@ msgid "Device Configuration"
 msgstr "Configurazione del dispositivo"
 
 msgid "Device is rebooting..."
-msgstr ""
+msgstr "Dispositivo in riavvio..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "Dispositivo irraggiungibile"
 
 msgid "Diagnostics"
 msgstr "Diagnostica"
@@ -873,14 +896,14 @@ msgid "Disable DNS setup"
 msgstr "Disabilita il setup dei DNS"
 
 msgid "Disable Encryption"
-msgstr ""
-
-msgid "Disable HW-Beacon timer"
-msgstr "Disabilita Timer Beacon HW"
+msgstr "Disabilita Crittografia"
 
 msgid "Disabled"
 msgstr "Disabilitato"
 
+msgid "Disabled (default)"
+msgstr "Disabilitato (default)"
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Ignora risposte RFC1918 upstream"
 
@@ -920,9 +943,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Non proseguire con le ricerche inverse per le reti locali."
 
-msgid "Do not send probe responses"
-msgstr "Disabilita Probe-Responses"
-
 msgid "Domain required"
 msgstr "Dominio richiesto"
 
@@ -930,7 +950,7 @@ msgid "Domain whitelist"
 msgstr "Elenco Domini consentiti"
 
 msgid "Don't Fragment"
-msgstr ""
+msgstr "Non Frammentare"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
@@ -1005,7 +1025,7 @@ msgid "Enable HE.net dynamic endpoint update"
 msgstr "Abilitazione aggiornamento endpoint dinamico HE.net"
 
 msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "Abilita negoziazione IPv6"
 
 msgid "Enable IPv6 negotiation on the PPP link"
 msgstr "Attiva la negoziazione IPv6 sul collegamento PPP"
@@ -1014,10 +1034,10 @@ msgid "Enable Jumbo Frame passthrough"
 msgstr "Abilita Jumbo Frame passthrough"
 
 msgid "Enable NTP client"
-msgstr "Attiva il client NTP"
+msgstr "Attiva il cliente NTP"
 
 msgid "Enable Single DES"
-msgstr ""
+msgstr "Abilita Single DES"
 
 msgid "Enable TFTP server"
 msgstr "Abilita il server TFTP"
@@ -1026,19 +1046,22 @@ msgid "Enable VLAN functionality"
 msgstr "Abilita la funzionalità VLAN"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
+msgstr "Abilita pulsante WPS, richiede WPA(2)-PSK"
+
+msgid "Enable key reinstallation (KRACK) countermeasures"
 msgstr ""
 
 msgid "Enable learning and aging"
 msgstr "Attivare l'apprendimento e l'invecchiamento"
 
 msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "Abilita mirroring dei pacchetti in ingresso"
 
 msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "Abilita mirroring dei pacchetti in uscita"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "Abilita l'opzione DF (non Frammentare) dei pacchetti incapsulati"
 
 msgid "Enable this mount"
 msgstr "Abilita questo mount"
@@ -1052,6 +1075,11 @@ msgstr "Abilita/Disabilita"
 msgid "Enabled"
 msgstr "Abilitato"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Abilita il protocollo di Spanning Tree su questo bridge"
 
@@ -1094,12 +1122,18 @@ msgstr "Scadenze"
 msgid ""
 "Expiry time of leased addresses, minimum is 2 minutes (<code>2m</code>)."
 msgstr ""
-"Tempo di scadenza di indirizzi localizzati, il minimo è di 2 minuti (<code> "
+"Tempo di scadenza di indirizzi a contratto, il minimo è di 2 minuti (<code> "
 "2m </code>)."
 
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Server Log di Sistema esterno"
 
@@ -1112,9 +1146,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Frame veloci"
-
 msgid "File"
 msgstr "File"
 
@@ -1150,6 +1181,9 @@ msgstr "Fine"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Impostazioni Firewall"
 
@@ -1195,8 +1229,11 @@ msgstr "Forza TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forza TKIP e CCMP (AES)"
 
+msgid "Force link"
+msgstr "Forza collegamento"
+
 msgid "Force use of NAT-T"
-msgstr ""
+msgstr "Forza uso del NAT-T"
 
 msgid "Form token mismatch"
 msgstr ""
@@ -1249,10 +1286,10 @@ msgid "General Setup"
 msgstr "Impostazioni Generali"
 
 msgid "General options for opkg"
-msgstr ""
+msgstr "Opzioni generali per opkg"
 
 msgid "Generate Config"
-msgstr ""
+msgstr "Genera Configurazione"
 
 msgid "Generate archive"
 msgstr "Genera Archivio"
@@ -1266,7 +1303,7 @@ msgstr ""
 "non è stata cambiata!"
 
 msgid "Global Settings"
-msgstr ""
+msgstr "Impostazioni Globali"
 
 msgid "Global network options"
 msgstr "Opzioni rete globale"
@@ -1347,13 +1384,13 @@ msgid "Hostnames"
 msgstr "Hostname"
 
 msgid "Hybrid"
-msgstr ""
+msgstr "Ibrido"
 
 msgid "IKE DH Group"
 msgstr ""
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "Indirizzi IP"
 
 msgid "IP address"
 msgstr "Indirizzo IP"
@@ -1389,7 +1426,7 @@ msgid "IPv4 only"
 msgstr "Solo IPv4"
 
 msgid "IPv4 prefix"
-msgstr ""
+msgstr "Prefisso IPv4"
 
 msgid "IPv4 prefix length"
 msgstr "Lunghezza prefisso IPv4"
@@ -1410,7 +1447,7 @@ msgid "IPv6 Neighbours"
 msgstr ""
 
 msgid "IPv6 Settings"
-msgstr ""
+msgstr "Impostazioni IPv6"
 
 msgid "IPv6 ULA-Prefix"
 msgstr ""
@@ -1445,9 +1482,15 @@ msgstr "Lunghezza prefisso IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr "Suffisso IPv6"
+
 msgid "IPv6-Address"
 msgstr "Indirizzo-IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1460,11 +1503,11 @@ msgstr "IPv6-su-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identità PEAP"
 
-msgid "If checked, 1DES is enaled"
-msgstr ""
+msgid "If checked, 1DES is enabled"
+msgstr "Se selezionata, 1DES è abilitata"
 
 msgid "If checked, encryption is disabled"
-msgstr ""
+msgstr "Se selezionata, crittografia è disabilitata"
 
 msgid ""
 "If specified, mount the device by its UUID instead of a fixed device node"
@@ -1553,6 +1596,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"
 
@@ -1566,7 +1612,7 @@ msgid "Interface is shutting down..."
 msgstr "L'intefaccia si sta spegnendo..."
 
 msgid "Interface name"
-msgstr ""
+msgstr "Nome Interfaccia"
 
 msgid "Interface not present or not connected yet."
 msgstr "Interfaccia non presente o non ancora connessa."
@@ -1581,7 +1627,7 @@ msgid "Interfaces"
 msgstr "Interfacce"
 
 msgid "Internal"
-msgstr ""
+msgstr "Interno"
 
 msgid "Internal Server Error"
 msgstr "Errore del Server Interno"
@@ -1598,6 +1644,9 @@ msgstr "ID VLAN non valido! Solo gli ID unici sono consentiti"
 msgid "Invalid username and/or password! Please try again."
 msgstr "Username o password non validi! Per favore riprova."
 
+msgid "Isolate Clients"
+msgstr "Isola Clienti"
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1606,8 +1655,8 @@ msgstr ""
 "Sembra tu stia provando a flashare un'immagine più grande delle dimensioni "
 "della memoria flash, per favore controlla il file!"
 
-msgid "Java Script required!"
-msgstr "Richiesto Java Script!"
+msgid "JavaScript required!"
+msgstr "Richiesto JavaScript!"
 
 msgid "Join Network"
 msgstr "Aggiungi Rete"
@@ -1622,10 +1671,10 @@ msgid "Keep settings"
 msgstr "Mantieni le Impostazioni"
 
 msgid "Kernel Log"
-msgstr "Log del kernel"
+msgstr "Registro del Kernel"
 
 msgid "Kernel Version"
-msgstr "Versione del kernel"
+msgstr "Versione del Kernel"
 
 msgid "Key"
 msgstr "Chiave"
@@ -1667,19 +1716,16 @@ msgid "Leaf"
 msgstr ""
 
 msgid "Lease time"
-msgstr ""
+msgstr "Tempo Contratto"
 
 msgid "Lease validity time"
-msgstr "Periodo di Validità del Lease"
+msgstr "Periodo di Validità del Contratto"
 
 msgid "Leasefile"
-msgstr "File di lease"
-
-msgid "Leasetime"
-msgstr "Tempo di lease"
+msgstr "File di contratti"
 
 msgid "Leasetime remaining"
-msgstr "Tempo lease residuo"
+msgstr "Tempo contratto residuo"
 
 msgid "Leave empty to autodetect"
 msgstr "Lasciare vuoto per l'autorilevamento"
@@ -1721,6 +1767,22 @@ msgstr ""
 "Elenco di Server <abbr title=\"Sistema Nome Dimio\">DNS</abbr>a cui "
 "inoltrare le richieste in"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1825,7 +1887,7 @@ msgid "MAC-Address"
 msgstr ""
 
 msgid "MAC-Address Filter"
-msgstr "Filtro dei MAC-Address"
+msgstr "Filtro indirizzo MAC"
 
 msgid "MAC-Filter"
 msgstr "Filtro MAC"
@@ -1854,14 +1916,11 @@ msgid ""
 msgstr ""
 
 msgid "Manual"
-msgstr ""
+msgstr "Manuale"
 
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Velocità massima"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1875,7 +1934,7 @@ msgid "Maximum amount of seconds to wait for the modem to become ready"
 msgstr ""
 
 msgid "Maximum hold time"
-msgstr "Velocità massima"
+msgstr "Tempo massimo di attesa"
 
 msgid ""
 "Maximum length of the name is 15 characters including the automatic protocol/"
@@ -1883,7 +1942,7 @@ msgid ""
 msgstr ""
 
 msgid "Maximum number of leased addresses."
-msgstr ""
+msgstr "Numero massimo indirizzi in contratto"
 
 msgid "Mbit/s"
 msgstr ""
@@ -1892,14 +1951,11 @@ msgid "Memory"
 msgstr "Memoria"
 
 msgid "Memory usage (%)"
-msgstr "Uso Memory (%)"
+msgstr "Uso Memoria (%)"
 
 msgid "Metric"
 msgstr "Metrica"
 
-msgid "Minimum Rate"
-msgstr "Velocità minima"
-
 msgid "Minimum hold time"
 msgstr "Velocità minima"
 
@@ -1912,11 +1968,14 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Modalità"
 
 msgid "Model"
-msgstr ""
+msgstr "Modello"
 
 msgid "Modem device"
 msgstr "Dispositivo modem"
@@ -1928,19 +1987,19 @@ msgid "Monitor"
 msgstr "Monitor"
 
 msgid "Mount Entry"
-msgstr ""
+msgstr "Voce di Mount"
 
 msgid "Mount Point"
-msgstr "Punto di mount"
+msgstr "Punto di Mount"
 
 msgid "Mount Points"
-msgstr "Punto di mount"
+msgstr "Punti di Mount"
 
 msgid "Mount Points - Mount Entry"
-msgstr ""
+msgstr "Punti di Mount - Voce di Mount"
 
 msgid "Mount Points - Swap Entry"
-msgstr ""
+msgstr "Punti di Mount - Voce Swap"
 
 msgid ""
 "Mount Points define at which point a memory device will be attached to the "
@@ -1959,22 +2018,19 @@ msgid "Mount point"
 msgstr "Punto di mount"
 
 msgid "Mount swap not specifically configured"
-msgstr ""
+msgstr "Monta swap non configurato specificatamente"
 
 msgid "Mounted file systems"
 msgstr "File system montati"
 
 msgid "Move down"
-msgstr ""
+msgstr "Muovi giù"
 
 msgid "Move up"
-msgstr ""
-
-msgid "Multicast Rate"
-msgstr "Velocità multicast"
+msgstr "Muovi su"
 
 msgid "Multicast address"
-msgstr ""
+msgstr "Indirizzo Multicast"
 
 msgid "NAS ID"
 msgstr "ID della NAS"
@@ -1985,6 +2041,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -1992,10 +2051,10 @@ msgid "NT Domain"
 msgstr ""
 
 msgid "NTP server candidates"
-msgstr ""
+msgstr "Candidati server NTP"
 
 msgid "NTP sync time-out"
-msgstr ""
+msgstr "Sincronizzazione NTP scaduta"
 
 msgid "Name"
 msgstr "Nome"
@@ -2028,7 +2087,7 @@ msgid "Next »"
 msgstr "Prossimo »"
 
 msgid "No DHCP Server configured for this interface"
-msgstr ""
+msgstr "Nessun Server DHCP configurato per questa interfaccia"
 
 msgid "No NAT-T"
 msgstr ""
@@ -2052,25 +2111,25 @@ msgid "No network name specified"
 msgstr ""
 
 msgid "No package lists available"
-msgstr ""
+msgstr "Nessuna lista pacchetti disponibile"
 
 msgid "No password set!"
-msgstr ""
+msgstr "Nessuna password immessa!"
 
 msgid "No rules in this chain"
-msgstr ""
+msgstr "Nessuna regola in questa catena"
 
 msgid "No zone assigned"
-msgstr ""
+msgstr "Nessuna zona assegnata"
 
 msgid "Noise"
 msgstr "Rumore"
 
 msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Margine di Rumore (SNR)"
 
 msgid "Noise:"
-msgstr ""
+msgstr "Rumore:"
 
 msgid "Non Pre-emtive CRC errors (CRC_P)"
 msgstr ""
@@ -2085,22 +2144,22 @@ msgid "Normal"
 msgstr "Normale"
 
 msgid "Not Found"
-msgstr ""
+msgstr "Non Trovato"
 
 msgid "Not associated"
 msgstr "Non associato"
 
 msgid "Not connected"
-msgstr ""
+msgstr "Non connesso"
 
 msgid "Note: Configuration files will be erased."
-msgstr ""
+msgstr "Nota: i files di Configurazione saranno eliminati"
 
 msgid "Note: interface name length"
-msgstr ""
+msgstr "Nota: lunghezza nome interfaccia"
 
 msgid "Notice"
-msgstr "Avviso"
+msgstr "Notifica"
 
 msgid "Nslookup"
 msgstr ""
@@ -2150,7 +2209,7 @@ msgid "One or more required fields have no value!"
 msgstr "Uno o più campi obbligatori sono vuoti!"
 
 msgid "Open list..."
-msgstr ""
+msgstr "Apri lista..."
 
 msgid "OpenConnect (CISCO AnyConnect)"
 msgstr ""
@@ -2164,18 +2223,30 @@ msgstr "Opzione cambiata"
 msgid "Option removed"
 msgstr "Opzione cancellata"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2207,42 +2278,41 @@ msgid "Other:"
 msgstr "Altro:"
 
 msgid "Out"
-msgstr ""
+msgstr "Uscita"
 
 msgid "Outbound:"
 msgstr "In uscita:"
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
 msgid "Override MAC address"
-msgstr ""
+msgstr "Sovrascrivi indirizzo MAC"
 
 msgid "Override MTU"
-msgstr "Sovrascivi MTU"
+msgstr "Sovrascrivi MTU"
 
 msgid "Override TOS"
-msgstr ""
+msgstr "Sovrascrivi TOS"
 
 msgid "Override TTL"
-msgstr ""
+msgstr "Sovrascrivi TTL"
 
 msgid "Override default interface name"
-msgstr ""
+msgstr "Sovrascrivi nome interfaccia di default"
 
 msgid "Override the gateway in DHCP responses"
-msgstr ""
+msgstr "Sovrascrivi il gateway nelle risposte DHCP"
 
 msgid ""
 "Override the netmask sent to clients. Normally it is calculated from the "
 "subnet that is served."
 msgstr ""
+"Sovrascrivi la netmask data ai clienti. Normalmente è calcolata dalla subnet "
+"servita."
 
 msgid "Override the table used for internal routes"
-msgstr ""
+msgstr "Sovrascrivi la tabella usata per le route interne"
 
 msgid "Overview"
 msgstr "Riassunto"
@@ -2262,6 +2332,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2302,7 +2375,7 @@ msgid "Packets"
 msgstr "Pacchetti"
 
 msgid "Part of zone %q"
-msgstr ""
+msgstr "Parte della zona %q"
 
 msgid "Password"
 msgstr "Password"
@@ -2319,6 +2392,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Password cambiata con successo!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Percorso al certificato CA"
 
@@ -2383,7 +2459,7 @@ msgid "Port"
 msgstr "Porta"
 
 msgid "Port status:"
-msgstr ""
+msgstr "Status porta:"
 
 msgid "Power Management Mode"
 msgstr ""
@@ -2391,6 +2467,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2418,7 +2503,7 @@ msgid "Processes"
 msgstr "Processi"
 
 msgid "Profile"
-msgstr ""
+msgstr "Profilo"
 
 msgid "Prot."
 msgstr "Prot."
@@ -2427,25 +2512,25 @@ msgid "Protocol"
 msgstr "Protocollo"
 
 msgid "Protocol family"
-msgstr ""
+msgstr "Famiglia protocollo"
 
 msgid "Protocol of the new interface"
-msgstr ""
+msgstr "Protocollo della nuova interfaccia"
 
 msgid "Protocol support is not installed"
-msgstr ""
+msgstr "Supporto protocollo non installato"
 
 msgid "Provide NTP server"
-msgstr ""
+msgstr "Fornisci server NTP"
 
 msgid "Provide new network"
-msgstr ""
+msgstr "Fornisci nuova rete"
 
 msgid "Pseudo Ad-Hoc (ahdemo)"
 msgstr "Pseudo Ad-Hoc (ahdemo)"
 
 msgid "Public Key"
-msgstr ""
+msgstr "Chiave Pubblica"
 
 msgid "Public prefix routed to this device for distribution to clients."
 msgstr ""
@@ -2454,6 +2539,12 @@ msgid "QMI Cellular"
 msgstr ""
 
 msgid "Quality"
+msgstr "Qualità"
+
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
 msgstr ""
 
 msgid "RFC3947 NAT-T mode"
@@ -2466,7 +2557,7 @@ msgid "RX"
 msgstr ""
 
 msgid "RX Rate"
-msgstr ""
+msgstr "Velocità RX"
 
 msgid "RaLink 802.11%s Wireless Controller"
 msgstr ""
@@ -2507,7 +2598,7 @@ msgid ""
 msgstr ""
 
 msgid "Really reset all changes?"
-msgstr ""
+msgstr "Azzerare veramente tutte le modifiche?"
 
 #, fuzzy
 msgid ""
@@ -2523,21 +2614,24 @@ msgid ""
 msgstr ""
 
 msgid "Really switch protocol?"
-msgstr ""
+msgstr "Cambiare veramente il protocollo?"
 
 msgid "Realtime Connections"
-msgstr "Connessioni in tempo reale"
+msgstr "Connessioni in Tempo Reale"
 
 msgid "Realtime Graphs"
-msgstr ""
+msgstr "Grafici in Tempo Reale"
 
 msgid "Realtime Load"
-msgstr "Carico in tempo reale"
+msgstr "Carico in Tempo Reale"
 
 msgid "Realtime Traffic"
-msgstr "Traffico in tempo reale"
+msgstr "Traffico in Tempo Reale"
 
 msgid "Realtime Wireless"
+msgstr "Wireless in Tempo Reale"
+
+msgid "Reassociation Deadline"
 msgstr ""
 
 msgid "Rebind protection"
@@ -2547,7 +2641,7 @@ msgid "Reboot"
 msgstr "Riavvia"
 
 msgid "Rebooting..."
-msgstr ""
+msgstr "Riavviando..."
 
 msgid "Reboots the operating system of your device"
 msgstr "Riavvia il sistema operativo del tuo dispositivo"
@@ -2556,7 +2650,7 @@ msgid "Receive"
 msgstr "Ricezione"
 
 msgid "Receiver Antenna"
-msgstr "Antenna ricevente"
+msgstr "Antenna Ricevente"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
 msgstr ""
@@ -2568,10 +2662,7 @@ msgid "Reconnecting interface"
 msgstr "Sto ricollegando l'interfaccia"
 
 msgid "References"
-msgstr ""
-
-msgid "Regulatory Domain"
-msgstr ""
+msgstr "Riferimenti"
 
 msgid "Relay"
 msgstr ""
@@ -2595,22 +2686,25 @@ msgid "Remove"
 msgstr "Rimuovi"
 
 msgid "Repeat scan"
-msgstr ""
+msgstr "Ripeti scan"
 
 msgid "Replace entry"
 msgstr "Sostituisci campo"
 
 msgid "Replace wireless configuration"
-msgstr ""
+msgstr "Sostituisci configurazione wireless"
 
 msgid "Request IPv6-address"
-msgstr ""
+msgstr "Richiede indirizzo-IPv6"
 
 msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "Richiede prefisso-IPv6 di lunghezza"
 
 msgid "Require TLS"
-msgstr ""
+msgstr "Richiede TLS"
+
+msgid "Required"
+msgstr "Richiesto"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
@@ -2618,13 +2712,18 @@ msgstr ""
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2639,7 +2738,7 @@ msgid "Reset Counters"
 msgstr "Azzera Contatori"
 
 msgid "Reset to defaults"
-msgstr ""
+msgstr "Azzera a default"
 
 msgid "Resolv and Hosts Files"
 msgstr ""
@@ -2657,7 +2756,7 @@ msgid "Restore backup"
 msgstr "Ripristina backup"
 
 msgid "Reveal/hide password"
-msgstr ""
+msgstr "Rivela/nascondi password"
 
 msgid "Revert"
 msgstr "Ripristina"
@@ -2697,10 +2796,10 @@ msgstr ""
 "rete può essere raggiunto."
 
 msgid "Run a filesystem check before mounting the device"
-msgstr ""
+msgstr "Esegui un controllo del filesystem prima di montare il dispositivo"
 
 msgid "Run filesystem check"
-msgstr ""
+msgstr "Esegui controllo del filesystem"
 
 msgid "SHA256"
 msgstr ""
@@ -2741,7 +2840,7 @@ msgid "Save & Apply"
 msgstr "Salva & applica"
 
 msgid "Save &#38; Apply"
-msgstr ""
+msgstr "Salva &#38; Applica"
 
 msgid "Scan"
 msgstr "Scan"
@@ -2750,13 +2849,13 @@ msgid "Scheduled Tasks"
 msgstr "Operazioni programmate"
 
 msgid "Section added"
-msgstr ""
+msgstr "Sezione aggiunta"
 
 msgid "Section removed"
-msgstr ""
+msgstr "Sezione rimossa"
 
 msgid "See \"mount\" manpage for details"
-msgstr ""
+msgstr "Vedi \"mount\" manpage per dettagli"
 
 msgid ""
 "Send LCP echo requests at the given interval in seconds, only effective in "
@@ -2766,11 +2865,8 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Isola utenti"
 
-msgid "Separate WDS"
-msgstr "WDS separati"
-
 msgid "Server Settings"
-msgstr ""
+msgstr "Impostazioni Server"
 
 msgid "Server password"
 msgstr ""
@@ -2792,6 +2888,11 @@ msgstr ""
 msgid "Services"
 msgstr "Servizi"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2866,7 +2967,7 @@ msgstr ""
 "specifici."
 
 msgid "Sort"
-msgstr "Elenca"
+msgstr "Ordina"
 
 msgid "Source"
 msgstr "Origine"
@@ -2929,14 +3030,11 @@ msgid "Static IPv6 Routes"
 msgstr "Instradamento statico IPv6"
 
 msgid "Static Leases"
-msgstr "Leases statici"
+msgstr "Contratti statici"
 
 msgid "Static Routes"
 msgstr "Instradamenti Statici"
 
-msgid "Static WDS"
-msgstr "WDS statico"
-
 msgid "Static address"
 msgstr "Indirizzo Statico"
 
@@ -2945,10 +3043,10 @@ msgid ""
 "to DHCP clients. They are also required for non-dynamic interface "
 "configurations where only hosts with a corresponding lease are served."
 msgstr ""
-"Leasing statici vengono utilizzati per assegnare indirizzi IP fissi e nomi "
-"host simbolici ai client DHCP. Essi sono necessari anche per interfacce di "
-"configurazione non dinamici, dove solo gli host con lease corrispondente "
-"servito vengono serviti."
+"I contratti statici vengono utilizzati per assegnare indirizzi IP fissi e "
+"nomi host simbolici ai client DHCP. Essi sono necessari anche per interfacce "
+"di configurazione non dinamici, dove solo gli host col contratto "
+"corrispondente vengono serviti."
 
 msgid "Status"
 msgstr "Stato"
@@ -3003,7 +3101,7 @@ msgid "System"
 msgstr "Sistema"
 
 msgid "System Log"
-msgstr "Log di sistema"
+msgstr "Registro di Sistema"
 
 msgid "System Properties"
 msgstr "Proprietà di Sistema"
@@ -3024,7 +3122,7 @@ msgid "TX"
 msgstr "TX"
 
 msgid "TX Rate"
-msgstr "Velocità di TX"
+msgstr "Velocità TX"
 
 msgid "Table"
 msgstr "Tabella"
@@ -3177,16 +3275,16 @@ msgstr ""
 "you choose the generic image format for your platform."
 
 msgid "There are no active leases."
-msgstr ""
+msgstr "Non ci sono contratti attivi."
 
 msgid "There are no pending changes to apply!"
-msgstr ""
+msgstr "Non ci sono cambiamenti pendenti da applicare!"
 
 msgid "There are no pending changes to revert!"
-msgstr ""
+msgstr "Non ci sono cambiamenti pendenti da regredire"
 
 msgid "There are no pending changes!"
-msgstr ""
+msgstr "Non ci sono cambiamenti pendenti!"
 
 msgid ""
 "There is no device assigned yet, please attach a network device in the "
@@ -3268,10 +3366,10 @@ msgid "This section contains no values yet"
 msgstr "Questa sezione non contiene ancora valori"
 
 msgid "Time Synchronization"
-msgstr ""
+msgstr "Sincronizzazione Orario"
 
 msgid "Time Synchronization is not configured yet."
-msgstr ""
+msgstr "Sincronizzazione Orario non ancora configurata"
 
 msgid "Timezone"
 msgstr "Fuso orario"
@@ -3280,6 +3378,8 @@ msgid ""
 "To restore configuration files, you can upload a previously generated backup "
 "archive here."
 msgstr ""
+"Per ripristinare i file configurazione, puoi inviare un archivio di backup "
+"generato precedentemente qui."
 
 msgid "Tone"
 msgstr ""
@@ -3332,9 +3432,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Modalità turbo"
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3351,10 +3448,10 @@ msgid "UMTS/GPRS/EV-DO"
 msgstr ""
 
 msgid "USB Device"
-msgstr ""
+msgstr "Periferica USB"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "Porte USB"
 
 msgid "UUID"
 msgstr ""
@@ -3366,25 +3463,25 @@ msgid "Unavailable Seconds (UAS)"
 msgstr ""
 
 msgid "Unknown"
-msgstr ""
+msgstr "Sconosciuto"
 
 msgid "Unknown Error, password not changed!"
-msgstr ""
+msgstr "Errore sconosciuto, password non cambiata!"
 
 msgid "Unmanaged"
-msgstr ""
+msgstr "Non gestito"
 
 msgid "Unmount"
-msgstr ""
+msgstr "Smonta"
 
 msgid "Unsaved Changes"
 msgstr "Modifiche non salvate"
 
 msgid "Unsupported protocol type."
-msgstr ""
+msgstr "Tipo protocollo non supportato."
 
 msgid "Update lists"
-msgstr ""
+msgstr "Aggiorna liste"
 
 msgid ""
 "Upload a sysupgrade-compatible image here to replace the running firmware. "
@@ -3399,7 +3496,7 @@ msgid "Upload archive..."
 msgstr "Carica archivio..."
 
 msgid "Uploaded File"
-msgstr "Invia file"
+msgstr "File Inviato"
 
 msgid "Uptime"
 msgstr "Tempo di attività"
@@ -3454,9 +3551,11 @@ msgid ""
 "standard host-specific lease time, e.g. 12h, 3d or infinite."
 msgstr ""
 "Utilizzare il pulsante <em>Aggiungi</em> per aggiungere una nuova voce di "
-"locazione. L'<em>Indirizzo-MAC</em> identifica l'host, l'<em>Indirizzo-IPv4</"
-"em> specifica l'indirizzo fisso da utilizzare e il <em> Nome Host</em> è "
-"assegnato come nome simbolico alla richiesta dell'host."
+"contratto. L'<em>Indirizzo-MAC</em> identifica l'host, l'<em>Indirizzo-IPv4</"
+"em> specifica l'indirizzo fisso da utilizzare e il <em>Nome Host</em> è "
+"assegnato come nome simbolico alla richiesta dell'host. L'opzionale "
+"<em>tempo di Contratto</em> può essere usato per impostare un tempo di "
+"contratto non-standard a uno specifico host, p.e. 12h, 3d o infinito."
 
 msgid "Used"
 msgstr "Usato"
@@ -3464,6 +3563,11 @@ msgstr "Usato"
 msgid "Used Key Slot"
 msgstr "Slot Chiave Usata"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3549,6 +3653,8 @@ msgstr ""
 msgid ""
 "Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)"
 msgstr ""
+"Attendi sincro NTP quei dati secondi, immetti 0 per disabilitare l'attesa "
+"(opzionale)"
 
 msgid "Waiting for changes to be applied..."
 msgstr "In attesa delle modifiche da applicare ..."
@@ -3614,10 +3720,7 @@ msgid "Write received DNS requests to syslog"
 msgstr "Scrittura delle richiesta DNS ricevute nel syslog"
 
 msgid "Write system log to file"
-msgstr ""
-
-msgid "XR Support"
-msgstr "Supporto XR"
+msgstr "Scrivi registro di sistema su file"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3631,9 +3734,9 @@ msgstr ""
 "potrebbe diventare inaccessibile!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"È necessario attivare Java Script nel tuo browser o LuCI non funzionerà "
+"È necessario attivare JavaScript nel tuo browser o LuCI non funzionerà "
 "correttamente."
 
 msgid ""
@@ -3648,10 +3751,6 @@ msgstr "qualsiasi"
 msgid "auto"
 msgstr "auto"
 
-#, fuzzy
-msgid "automatic"
-msgstr "statico"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3674,7 +3773,7 @@ msgid "disable"
 msgstr "disabilita"
 
 msgid "disabled"
-msgstr ""
+msgstr "disabilitato"
 
 msgid "expired"
 msgstr "scaduto"
@@ -3683,8 +3782,8 @@ msgid ""
 "file where given <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
 "abbr>-leases will be stored"
 msgstr ""
-"file dove vengono salvati le richieste <abbr title=\"Dynamic Host "
-"Configuration Protocol\">DHCP</abbr> assegnate"
+"file dove vengono salvati i contratti <abbr title=\"Dynamic Host "
+"Configuration Protocol\">DHCP</abbr> dati"
 
 msgid "forward"
 msgstr "inoltro"
@@ -3702,7 +3801,7 @@ msgid "hidden"
 msgstr "nascosto"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "modo ibrido"
 
 msgid "if target is a network"
 msgstr "se la destinazione è una rete"
@@ -3725,7 +3824,7 @@ msgstr "File <abbr title=\"Sistema Nome Dominio\">DNS</abbr> locale"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3761,12 +3860,6 @@ msgstr "instradato"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3779,6 +3872,9 @@ msgstr ""
 msgid "tagged"
 msgstr "etichettato"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "sconosciuto"
 
@@ -3800,6 +3896,55 @@ msgstr "Sì"
 msgid "« Back"
 msgstr "« Indietro"
 
+#~ msgid "Leasetime"
+#~ msgstr "Tempo di contratto"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "statico"
+
+#~ msgid "AR Support"
+#~ msgstr "Supporto AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Dispositivo Wireless Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "Scansione in background"
+
+#~ msgid "Compression"
+#~ msgstr "Compressione"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Disabilita Timer Beacon HW"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Disabilita Probe-Responses"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Frame veloci"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Velocità massima"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Velocità minima"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Velocità multicast"
+
+#~ msgid "Separate WDS"
+#~ msgstr "WDS separati"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS statico"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Modalità turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Supporto XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Sarà creata una rete aggiuntiva se lasci questo senza spunta."
 
index 1b28cff..af4721c 100644 (file)
@@ -3,14 +3,14 @@ msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:40+0200\n"
-"PO-Revision-Date: 2017-01-26 18:49+0900\n"
+"PO-Revision-Date: 2017-10-20 13:54+0900\n"
 "Last-Translator: INAGAKI Hiroshi <musashino.open@gmail.com>\n"
 "Language: ja\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 1.8.11\n"
+"X-Generator: Poedit 2.0.4\n"
 "Language-Team: \n"
 
 msgid "%s is untagged in multiple VLANs!"
@@ -38,13 +38,13 @@ msgid "-- custom --"
 msgstr "-- 手動設定 --"
 
 msgid "-- match by device --"
-msgstr "-- ã\83\87ã\83\90ã\82¤ã\82¹ã\81§è¨­定 --"
+msgstr "-- ã\83\87ã\83\90ã\82¤ã\82¹ã\82\92æ\8c\87定 --"
 
 msgid "-- match by label --"
-msgstr "-- ã\83©ã\83\99ã\83«ã\81§è¨­定 --"
+msgstr "-- ã\83©ã\83\99ã\83«ã\82\92æ\8c\87定 --"
 
 msgid "-- match by uuid --"
-msgstr "-- UUIDで設定 --"
+msgstr "-- UUID を指定 --"
 
 msgid "1 Minute Load:"
 msgstr "過去1分の負荷:"
@@ -52,12 +52,36 @@ msgstr "過去1分の負荷:"
 msgid "15 Minute Load:"
 msgstr "過去15分の負荷:"
 
-msgid "464XLAT (CLAT)"
+msgid "4-character hexadecimal ID"
 msgstr ""
 
+msgid "464XLAT (CLAT)"
+msgstr "464XLAT (CLAT)"
+
 msgid "5 Minute Load:"
 msgstr "過去5分の負荷:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr "802.11r 高速ローミング"
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr "802.11w アソシエーションSAクエリの最大タイムアウト時間です。"
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr "802.11w アソシエーションSAクエリの再試行タイムアウト時間です。"
+
+msgid "802.11w Management Frame Protection"
+msgstr "802.11w 管理フレーム保護"
+
+msgid "802.11w maximum timeout"
+msgstr "802.11w 最大タイムアウト"
+
+msgid "802.11w retry timeout"
+msgstr "802.11w 再試行タイムアウト"
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -129,27 +153,31 @@ msgstr "<abbr title=\"maximal\">最大</abbr> 並列処理クエリ"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
-msgid "A43C + J43 + A43"
+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"
 
 msgid "A43C + J43 + A43 + V43"
-msgstr ""
+msgstr "A43C + J43 + A43 + V43"
 
 msgid "ADSL"
 msgstr "ADSL"
 
 msgid "AICCU (SIXXS)"
-msgstr ""
+msgstr "AICCU (SIXXS)"
 
 msgid "ANSI T1.413"
-msgstr ""
+msgstr "ANSI T1.413"
 
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "ARサポート"
-
 msgid "ARP retry threshold"
 msgstr "ARP再試行しきい値"
 
@@ -204,7 +232,7 @@ msgstr ""
 "稼働中の <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-経路情報"
 
 msgid "Active Connections"
-msgstr "アクティブコネクション"
+msgstr "アクティブ コネクション"
 
 msgid "Active DHCP Leases"
 msgstr "アクティブなDHCPリース"
@@ -228,13 +256,13 @@ msgid "Additional Hosts files"
 msgstr "追加のホストファイル"
 
 msgid "Additional servers file"
-msgstr ""
+msgstr "追加のサーバー ファイル"
 
 msgid "Address"
 msgstr "アドレス"
 
 msgid "Address to access local relay bridge"
-msgstr "ローカルリレーブリッジにアクセスするためのIPアドレス"
+msgstr "ローカル リレーブリッジにアクセスするためのIPアドレス"
 
 msgid "Administration"
 msgstr "管理画面"
@@ -257,7 +285,7 @@ msgid "Allocate IP sequentially"
 msgstr ""
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
-msgstr "<abbr title=\"Secure Shell\">SSH</abbr> パスワード認証を許可します"
+msgstr "<abbr title=\"Secure Shell\">SSH</abbr> パスワード認証を許可します"
 
 msgid "Allow all except listed"
 msgstr "リスト内の端末からのアクセスを禁止"
@@ -270,20 +298,20 @@ msgstr "ローカルホストを許可する"
 
 msgid "Allow remote hosts to connect to local SSH forwarded ports"
 msgstr ""
-"リモートホストがSSH転送されたローカルのポートに接続することを許可します"
+"リモートホストがSSH転送されたローカルのポートに接続することを許可します"
 
 msgid "Allow root logins with password"
-msgstr "ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\82\92使ç\94¨ã\81\97ã\81\9froot権é\99\90ã\81§ã\81®ã\83­ã\82°ã\82¤ã\83³ã\82\92許å\8f¯ã\81\99ã\82\8b"
+msgstr "ã\83\91ã\82¹ã\83¯ã\83¼ã\83\89ã\81§ã\81® root ã\83­ã\82°ã\82¤ã\83³ã\82\92許å\8f¯"
 
 msgid "Allow the <em>root</em> user to login with password"
-msgstr "パスワードを使用した<em>root</em>権限でのログインを許可する"
+msgstr "パスワードを使用した <em>root</em> 権限でのログインを許可します。"
 
 msgid ""
 "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
 msgstr ""
 
 msgid "Allowed IPs"
-msgstr ""
+msgstr "許可されるIP"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
@@ -381,7 +409,7 @@ msgid ""
 msgstr ""
 
 msgid "Assign interfaces..."
-msgstr ""
+msgstr "インターフェースの割当て..."
 
 msgid ""
 "Assign prefix parts using this hexadecimal subprefix ID for this interface."
@@ -390,14 +418,8 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "認証済み端末"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s 無線LANコントローラ"
-
 msgid "Auth Group"
-msgstr ""
-
-msgid "AuthGroup"
-msgstr ""
+msgstr "認証グループ"
 
 msgid "Authentication"
 msgstr "認証"
@@ -421,7 +443,7 @@ msgid "Automatic Homenet (HNCP)"
 msgstr ""
 
 msgid "Automatically check filesystem for errors before mounting"
-msgstr "マウント実行前にファイルシステムのエラーを自動チェックします。"
+msgstr "マウント実行前にファイルシステムのエラーを自動的にチェックします。"
 
 msgid "Automatically mount filesystems on hotplug"
 msgstr "ホットプラグによってファイルシステムを自動的にマウントします。"
@@ -471,9 +493,6 @@ msgstr "概要へ戻る"
 msgid "Back to scan results"
 msgstr "スキャン結果へ戻る"
 
-msgid "Background Scan"
-msgstr "バックグラウンドスキャン"
-
 msgid "Backup / Flash Firmware"
 msgstr "バックアップ / ファームウェア更新"
 
@@ -481,7 +500,7 @@ msgid "Backup / Restore"
 msgstr "バックアップ / 復元"
 
 msgid "Backup file list"
-msgstr "ã\83\90ã\83\83ã\82¯ã\82¢ã\83\83ã\83\97ã\83»ã\83\95ã\82¡ã\82¤ã\83«リスト"
+msgstr "ã\83\90ã\83\83ã\82¯ã\82¢ã\83\83ã\83\97ã\83\95ã\82¡ã\82¤ã\83« リスト"
 
 msgid "Bad address specified!"
 msgstr "無効なアドレスです!"
@@ -497,9 +516,9 @@ msgid ""
 "configuration files marked by opkg, essential base files and the user "
 "defined backup patterns."
 msgstr ""
-"以ä¸\8bã\81¯ã\83\90ã\83\83ã\82¯ã\82¢ã\83\83ã\83\97ã\81®é\9a\9bã\81«å\90«ã\81¾ã\82\8cã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\83ªã\82¹ã\83\88ã\81§ã\81\99ã\80\82ã\81\93ã\81®ã\83ªã\82¹ã\83\88ã\81¯ã\80\81opkgã\81«ã\82\88ã\81£"
-"ã\81¦èª\8dè­\98ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b設å®\9aã\83\95ã\82¡ã\82¤ã\83«ã\80\81é\87\8dè¦\81ã\81ªã\83\99ã\83¼ã\82¹ã\83\95ã\82¡ã\82¤ã\83«ã\80\81ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8c設å®\9aã\81\97ã\81\9fæ­£è¦\8f表"
-"に一致したファイルの一覧です。"
+"以ä¸\8bã\81¯ã\80\81ã\83\90ã\83\83ã\82¯ã\82¢ã\83\83ã\83\97ã\81®é\9a\9bã\81«å\90«ã\81¾ã\82\8cã\82\8bã\83\95ã\82¡ã\82¤ã\83«ã\81®ã\83ªã\82¹ã\83\88ã\81§ã\81\99ã\80\82ã\81\93ã\81®ã\83ªã\82¹ã\83\88ã\81¯ã\80\81opkgã\81«"
+"ã\82\88ã\81£ã\81¦èª\8dè­\98ã\81\95ã\82\8cã\81¦ã\81\84ã\82\8b設å®\9aã\83\95ã\82¡ã\82¤ã\83«ã\80\81é\87\8dè¦\81ã\81ªã\83\99ã\83¼ã\82¹ã\83\95ã\82¡ã\82¤ã\83«ã\80\81ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8c設å®\9aã\81\97ã\81\9fã\83\91"
+"ターンに一致したファイルの一覧です。"
 
 msgid "Bind interface"
 msgstr ""
@@ -521,10 +540,10 @@ msgid "Bridge"
 msgstr "ブリッジ"
 
 msgid "Bridge interfaces"
-msgstr "ブリッジインターフェース"
+msgstr "ブリッジ インターフェース"
 
 msgid "Bridge unit number"
-msgstr "ブリッジユニット番号"
+msgstr "ブリッジ ユニット番号"
 
 msgid "Bring up on boot"
 msgstr "デフォルトで起動する"
@@ -542,14 +561,14 @@ msgid ""
 "Build/distribution specific feed definitions. This file will NOT be "
 "preserved in any sysupgrade."
 msgstr ""
-"ビルド/ディストリビューション固有のフィード定義です。このファイルはsysupgrade"
-"の際に引き継がれません。"
+"ビルド / ディストリビューション固有のフィード定義です。このファイルは"
+"sysupgradeの際に引き継がれません。"
 
 msgid "Buttons"
 msgstr "ボタン"
 
 msgid "CA certificate; if empty it will be saved after the first connection."
-msgstr ""
+msgstr "CA証明書(空白の場合、初回の接続後に保存されます。)"
 
 msgid "CPU usage (%)"
 msgstr "CPU使用率 (%)"
@@ -583,6 +602,7 @@ msgstr "マウント前にファイルシステムをチェックする"
 
 msgid "Check this option to delete the existing networks from this radio."
 msgstr ""
+"この無線から既存のネットワークを削除する場合、このオプションを有効にします。"
 
 msgid "Checksum"
 msgstr "チェックサム"
@@ -593,10 +613,10 @@ msgid ""
 "fill out the <em>create</em> field to define a new zone and attach the "
 "interface to it."
 msgstr ""
-"このインターフェースに設定するファイウォール・ゾーンを選択してください。<em>"
-"設定しない</em>を選択すると、設定済みのゾーンを削除します。また、<em>作成</"
-"em>フィールドにゾーン名を入力すると、新しくゾーンを作成し、このインターフェー"
-"ã\82¹ã\81«è¨­å®\9aã\81\97ã\81¾ã\81\99ã\80\82"
+"このインターフェースに設定するファイウォール ゾーンを選択してください。<em>設"
+"定しない</em>を選択すると、設定済みのゾーンを削除します。また、<em>作成</em>"
+"フィールドにゾーン名を入力すると、新しくゾーンを作成し、このインターフェース"
+"に設定します。"
 
 msgid ""
 "Choose the network(s) you want to attach to this wireless interface or fill "
@@ -616,10 +636,10 @@ msgid ""
 "configuration files. To reset the firmware to its initial state, click "
 "\"Perform reset\" (only possible with squashfs images)."
 msgstr ""
-"\"バックアップアーカイブの作成\"をクリックすると、現在の設定ファイルをtar形式"
-"のアーカイブファイルとしてダウンロードします。設定のリセットを行う場合、\"設"
-"å®\9aã\83ªã\82»ã\83\83ã\83\88\"ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82\81\9fã\81 ã\81\97ã\80\81squashfsã\82\92ã\81\8a使ã\81\84ã\81®å ´å\90\88ã\81®ã\81¿ä½¿ç\94¨å\8f¯"
-"能です)"
+"\"バックアップ アーカイブの作成\"をクリックすると、現在の設定ファイルをtar形"
+"式のアーカイブファイルとしてダウンロードします。設定のリセットを行う場"
+"å\90\88ã\80\81\"設å®\9aã\83ªã\82»ã\83\83ã\83\88\"ã\82\92ã\82¯ã\83ªã\83\83ã\82¯ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82\81\9fã\81 ã\81\97ã\80\81squashfsã\82\92ã\81\8a使ã\81\84ã\81®å ´å\90\88ã\81®"
+"み使用可能です)"
 
 msgid "Client"
 msgstr "クライアント"
@@ -646,8 +666,16 @@ msgstr "コマンド"
 msgid "Common Configuration"
 msgstr "一般設定"
 
-msgid "Compression"
-msgstr "圧縮"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
+"キーのインストールに使用される EAPOL キーフレームの再送信を無効にすることによ"
+"り、クライアント サイドの Key Reinstallation Attacks (KRACK) を困難にします。"
+"この回避策は、相互運用性の問題や、特に高負荷のトラフィック環境下におけるキー "
+"ネゴシエーションの信頼性低下の原因となることがあります。"
 
 msgid "Configuration"
 msgstr "設定"
@@ -689,7 +717,7 @@ msgid "Cover the following interfaces"
 msgstr "インターフェースの指定"
 
 msgid "Create / Assign firewall-zone"
-msgstr "ファイアウォールゾーンの作成 / 割り当て"
+msgstr "ファイアウォール ゾーンの作成 / 割り当て"
 
 msgid "Create Interface"
 msgstr "インターフェースの作成"
@@ -763,7 +791,7 @@ msgid "DNS-Label / FQDN"
 msgstr ""
 
 msgid "DNSSEC"
-msgstr ""
+msgstr "DNSSEC"
 
 msgid "DNSSEC check unsigned"
 msgstr ""
@@ -778,7 +806,7 @@ msgid "DSL"
 msgstr "DSL"
 
 msgid "DSL Status"
-msgstr ""
+msgstr "DSL ステータス"
 
 msgid "DSL line mode"
 msgstr ""
@@ -796,13 +824,13 @@ msgid "Default %d"
 msgstr "標準設定 %d"
 
 msgid "Default gateway"
-msgstr "デフォルトゲートウェイ"
+msgstr "デフォルト ゲートウェイ"
 
 msgid "Default is stateless + stateful"
 msgstr "デフォルトは ステートレス + ステートフル です。"
 
 msgid "Default route"
-msgstr ""
+msgstr "デフォルト ルート"
 
 msgid "Default state"
 msgstr "標準状態"
@@ -843,7 +871,7 @@ msgid "Device is rebooting..."
 msgstr "デバイスを再起動中です..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "デバイスに到達できません"
 
 msgid "Diagnostics"
 msgstr "診断機能"
@@ -868,19 +896,19 @@ msgid "Disable DNS setup"
 msgstr "DNSセットアップを無効にする"
 
 msgid "Disable Encryption"
-msgstr ""
-
-msgid "Disable HW-Beacon timer"
-msgstr "HWビーコンタイマーを無効にする"
+msgstr "暗号化を無効にする"
 
 msgid "Disabled"
 msgstr "無効"
 
+msgid "Disabled (default)"
+msgstr "無効(デフォルト)"
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "RFC1918の応答を破棄します"
 
 msgid "Displaying only packages containing"
-msgstr "右記の表示を含んだパッケージのみを表示中"
+msgstr "右記の文字列を含んだパッケージのみを表示中"
 
 msgid "Distance Optimization"
 msgstr "距離の最適化"
@@ -910,19 +938,16 @@ msgstr ""
 "無効なリプライをキャッシュしません (例:存在しないドメインからの返答など)"
 
 msgid "Do not forward requests that cannot be answered by public name servers"
-msgstr "パブリックDNSサーバーが返答できなかったリクエストを転送しません"
+msgstr "パブリック DNSサーバーが返答できなかったリクエストを転送しません"
 
 msgid "Do not forward reverse lookups for local networks"
-msgstr "ローカルネットワークへの逆引きを転送しません"
-
-msgid "Do not send probe responses"
-msgstr "プローブレスポンスを送信しない"
+msgstr "ローカル ネットワークへの逆引きを転送しません"
 
 msgid "Domain required"
 msgstr "ドメイン必須"
 
 msgid "Domain whitelist"
-msgstr "ドメインホワイトリスト"
+msgstr "ドメイン ホワイトリスト"
 
 msgid "Don't Fragment"
 msgstr ""
@@ -938,7 +963,7 @@ msgid "Download and install package"
 msgstr "パッケージのダウンロードとインストール"
 
 msgid "Download backup"
-msgstr "バックアップアーカイブのダウンロード"
+msgstr "バックアップ アーカイブのダウンロード"
 
 msgid "Dropbear Instance"
 msgstr "Dropbear設定"
@@ -955,8 +980,7 @@ msgid "Dual-Stack Lite (RFC6333)"
 msgstr "Dual-Stack Lite (RFC6333)"
 
 msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
-msgstr ""
-"ダイナミック <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
+msgstr "動的 <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
 
 msgid "Dynamic tunnel"
 msgstr "動的トンネル機能"
@@ -1001,19 +1025,19 @@ msgid "Enable HE.net dynamic endpoint update"
 msgstr "HE.netの動的endpoint更新を有効にします"
 
 msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "IPv6 ネゴシエーションの有効化"
 
 msgid "Enable IPv6 negotiation on the PPP link"
-msgstr "PPPリンクのIPv6ネゴシエーションを有効にする"
+msgstr "PPPリンクのIPv6 ネゴシエーションを有効にする"
 
 msgid "Enable Jumbo Frame passthrough"
-msgstr "ジャンボフレームパススルーを有効にする"
+msgstr "ジャンボフレーム パススルーを有効にする"
 
 msgid "Enable NTP client"
 msgstr "NTPクライアント機能を有効にする"
 
 msgid "Enable Single DES"
-msgstr ""
+msgstr "シングルDESの有効化"
 
 msgid "Enable TFTP server"
 msgstr "TFTPサーバーを有効にする"
@@ -1022,16 +1046,19 @@ msgid "Enable VLAN functionality"
 msgstr "VLAN機能を有効にする"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "WPS プッシュボタンを有効化するには、WPA(2)-PSKが必要です。"
+
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr "Key Reinstallation (KRACK) 対策の有効化"
 
 msgid "Enable learning and aging"
-msgstr "ラーニングエイジング機能を有効にする"
+msgstr "ラーニング エイジング機能を有効にする"
 
 msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "受信パケットのミラーリングを有効化"
 
 msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "送信パケットのミラーリングを有効化"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
 msgstr ""
@@ -1048,8 +1075,13 @@ msgstr "有効/無効"
 msgid "Enabled"
 msgstr "有効"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
-msgstr "スパニングツリープロトコルを有効にする"
+msgstr "スパニングツリー プロトコルを有効にする"
 
 msgid "Encapsulation mode"
 msgstr "カプセル化モード"
@@ -1058,10 +1090,10 @@ msgid "Encryption"
 msgstr "暗号化モード"
 
 msgid "Endpoint Host"
-msgstr ""
+msgstr "エンドポイント ホスト"
 
 msgid "Endpoint Port"
-msgstr ""
+msgstr "エンドポイント ポート"
 
 msgid "Erasing..."
 msgstr "消去中..."
@@ -1096,11 +1128,17 @@ msgstr ""
 msgid "External"
 msgstr "外部"
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
-msgstr "外部システムログサーバー"
+msgstr "外部システムログ サーバー"
 
 msgid "External system log server port"
-msgstr "外部システムログ・サーバーポート"
+msgstr "外部システムログ・サーバー ポート"
 
 msgid "External system log server protocol"
 msgstr "外部システムログ・サーバー プロトコル"
@@ -1108,9 +1146,6 @@ msgstr "外部システムログ・サーバー プロトコル"
 msgid "Extra SSH command options"
 msgstr "拡張 SSHコマンドオプション"
 
-msgid "Fast Frames"
-msgstr "ファスト・フレーム"
-
 msgid "File"
 msgstr "ファイル"
 
@@ -1127,7 +1162,7 @@ msgid "Filter private"
 msgstr "プライベートフィルター"
 
 msgid "Filter useless"
-msgstr "Filter useless"
+msgstr ""
 
 msgid ""
 "Find all currently attached filesystems and swap and replace configuration "
@@ -1137,7 +1172,7 @@ msgstr ""
 "づいてデフォルト設定を置き換えます。"
 
 msgid "Find and join network"
-msgstr "ã\83\8dã\83\83ã\83\88ã\83¯ã\83¼ã\82¯ã\82\92æ¤\9cç´¢ã\81\97ã\81¦参加"
+msgstr "ã\83\8dã\83\83ã\83\88ã\83¯ã\83¼ã\82¯ã\81®æ¤\9cç´¢ã\81¨参加"
 
 msgid "Find package"
 msgstr "パッケージを検索"
@@ -1148,17 +1183,20 @@ msgstr "終了"
 msgid "Firewall"
 msgstr "ファイアウォール"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "ファイアウォール設定"
 
 msgid "Firewall Status"
-msgstr "ファイアウォールステータス"
+msgstr "ファイアウォール ステータス"
 
 msgid "Firmware File"
 msgstr "ファームウェア ファイル"
 
 msgid "Firmware Version"
-msgstr "ファームウェアバージョン"
+msgstr "ファームウェア バージョン"
 
 msgid "Fixed source port for outbound DNS queries"
 msgstr "DNSクエリを送信する送信元ポートを固定します"
@@ -1194,8 +1232,11 @@ msgstr "TKIP を使用"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "TKIP 及びCCMP (AES) を使用"
 
+msgid "Force link"
+msgstr "強制リンク"
+
 msgid "Force use of NAT-T"
-msgstr ""
+msgstr "NAT-Tの強制使用"
 
 msgid "Form token mismatch"
 msgstr ""
@@ -1207,13 +1248,13 @@ msgid "Forward Error Correction Seconds (FECS)"
 msgstr ""
 
 msgid "Forward broadcast traffic"
-msgstr "ブロードキャストトラフィックを転送する"
+msgstr "ブロードキャスト トラフィックを転送する"
 
 msgid "Forwarding mode"
 msgstr "転送モード"
 
 msgid "Fragmentation Threshold"
-msgstr "フラグメンテーション値"
+msgstr "フラグメンテーションしきい値"
 
 msgid "Frame Bursting"
 msgstr "フレームバースト"
@@ -1228,6 +1269,8 @@ msgid ""
 "Further information about WireGuard interfaces and peers at <a href=\"http://"
 "wireguard.io\">wireguard.io</a>."
 msgstr ""
+"WireGuard インターフェースとピアについての詳細情報: <a href=\"http://"
+"wireguard.io\">wireguard.io</a>"
 
 msgid "GHz"
 msgstr "GHz"
@@ -1239,7 +1282,7 @@ msgid "Gateway"
 msgstr "ゲートウェイ"
 
 msgid "Gateway ports"
-msgstr "ゲートウェイポート"
+msgstr "ゲートウェイ ポート"
 
 msgid "General Settings"
 msgstr "一般設定"
@@ -1254,7 +1297,7 @@ msgid "Generate Config"
 msgstr "コンフィグ生成"
 
 msgid "Generate archive"
-msgstr "バックアップアーカイブの作成"
+msgstr "バックアップ アーカイブの作成"
 
 msgid "Generic 802.11%s Wireless Controller"
 msgstr "802.11%s 無線LANコントローラ"
@@ -1275,7 +1318,7 @@ msgid "Go to relevant configuration page"
 msgstr "関連する設定ページへ移動"
 
 msgid "Group Password"
-msgstr ""
+msgstr "グループ パスワード"
 
 msgid "Guest"
 msgstr "ゲスト"
@@ -1284,7 +1327,7 @@ msgid "HE.net password"
 msgstr "HE.net パスワード"
 
 msgid "HE.net username"
-msgstr ""
+msgstr "HE.net ユーザー名"
 
 msgid "HT mode (802.11n)"
 msgstr "HT モード (802.11n)"
@@ -1322,7 +1365,7 @@ msgid "Host"
 msgstr "ホスト"
 
 msgid "Host entries"
-msgstr "ホストエントリー"
+msgstr "ホスト エントリー"
 
 msgid "Host expiry timeout"
 msgstr ""
@@ -1344,7 +1387,7 @@ msgid "Hybrid"
 msgstr "ハイブリッド"
 
 msgid "IKE DH Group"
-msgstr ""
+msgstr "IKE DHグループ"
 
 msgid "IP Addresses"
 msgstr "IPアドレス"
@@ -1439,9 +1482,15 @@ msgstr "IPv6 プレフィクス長"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr "IPv6 サフィックス"
+
 msgid "IPv6-Address"
 msgstr "IPv6-アドレス"
 
+msgid "IPv6-PD"
+msgstr "IPv6-PD"
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1454,28 +1503,29 @@ msgstr "IPv6-over-IPv4 (6to4)"
 msgid "Identity"
 msgstr "識別子"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
-msgstr ""
+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 ""
-"固定のデバイスã\83\8eã\83¼ã\83\89å\90\8dã\81®ã\81\8bã\82\8fã\82\8aã\81«ã\80\81設å®\9aã\81\97ã\81\9fã\83\91ã\83¼ã\83\86ã\82£ã\82·ã\83§ã\83³ã\83©ã\83\99ã\83«ã\82\92使ç\94¨ã\81\97ã\81¦ã\83\9eã\82¦"
-"ントします。"
+"固定のデバイス ã\83\8eã\83¼ã\83\89å\90\8dã\81®ã\81\8bã\82\8fã\82\8aã\81«ã\80\81設å®\9aã\81\95ã\82\8cã\81\9fã\83\91ã\83¼ã\83\86ã\82£ã\82·ã\83§ã\83³ ã\83©ã\83\99ã\83«ã\82\92使ç\94¨ã\81\97ã\81¦"
+"ã\83\9eã\82¦ã\83³ã\83\88ã\81\97ã\81¾ã\81\99ã\80\82"
 
 msgid "If unchecked, no default route is configured"
-msgstr "チェックされていない場合、デフォルトルートを設定しません"
+msgstr "チェックされていない場合、デフォルト ルートを設定しません"
 
 msgid "If unchecked, the advertised DNS server addresses are ignored"
-msgstr "チェックされていない場合、通知されたDNSサーバーアドレスを無視します"
+msgstr "チェックされていない場合、通知されたDNSサーバー アドレスを無視します"
 
 msgid ""
 "If your physical memory is insufficient unused data can be temporarily "
@@ -1484,11 +1534,11 @@ msgid ""
 "slow process as the swap-device cannot be accessed with the high datarates "
 "of the <abbr title=\"Random Access Memory\">RAM</abbr>."
 msgstr ""
-"ç\89©ç\90\86ã\83¡ã\83¢ã\83ªã\81\8cä¸\8d足ã\81\99ã\82\8bå ´å\90\88ã\80\81ä¸\80æ\99\82ç\9a\84ã\81«ã\83\87ã\83¼ã\82¿ã\82\92ã\82\88ã\82\8a大容é\87\8fã\81ª<abbr title=\"Random "
-"Access Memory\">RAM</abbr>デバイスにスワップすることが出来ます。ただし、デー"
-"ã\82¿ã\81®ã\82¹ã\83¯ã\83\83ã\83\97ã\81¯é\9d\9e常ã\81«é\81\85ã\81\84å\87¦ç\90\86ã\81§ã\81\82ã\82\8bã\81\9fã\82\81ã\80\81ã\82¹ã\83¯ã\83\83ã\83\97ã\81\99ã\82\8bã\83\87ã\83\90ã\82¤ã\82¹ã\81«ã\81¯é«\98é\80\9fã\81«<abbr "
-"title=\"Random Access Memory\">RAM</abbr>にアクセスすることができなくなる恐れ"
-"ã\81\8cã\81\82ã\82\8aます。"
+"ç\89©ç\90\86ã\83¡ã\83¢ã\83ªã\81\8cä¸\8d足ã\81\99ã\82\8bå ´å\90\88ã\80\81使ç\94¨ã\81\95ã\82\8cã\81¦ã\81\84ã\81ªã\81\84ã\83\87ã\83¼ã\82¿ã\82\92ä¸\80æ\99\82ç\9a\84ã\81«ã\82¹ã\83¯ã\83\83ã\83\97 ã\83\87ã\83\90ã\82¤ã\82¹ã\81«"
+"スワップし、<abbr title=\"Random Access Memory\">RAM</abbr>の使用可能領域を増"
+"ã\82\84ã\81\99ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\81¾ã\81\99ã\80\82ã\81\9fã\81 ã\81\97ã\80\81ã\82¹ã\83¯ã\83\83ã\83\97 ã\83\87ã\83\90ã\82¤ã\82¹ã\81¯<abbr title=\"Random Access "
+"Memory\">RAM</abbr>から高速にアクセスすることができないため、データのスワップ"
+"ã\81¯é\9d\9e常ã\81«é\81\85ã\81\84å\87¦ç\90\86ã\81§ã\81\82ã\82\8bã\81\93ã\81¨ã\81«æ³¨æ\84\8fã\81\97ます。"
 
 msgid "Ignore <code>/etc/hosts</code>"
 msgstr "<code>/etc/hosts</code>を無視"
@@ -1497,7 +1547,7 @@ msgid "Ignore interface"
 msgstr "インターフェースを無視する"
 
 msgid "Ignore resolve file"
-msgstr "リゾルバファイルを無視する"
+msgstr "リゾルバ ファイルを無視する"
 
 msgid "Image"
 msgstr "イメージ"
@@ -1543,6 +1593,9 @@ msgstr "インストール済みパッケージ"
 msgid "Interface"
 msgstr "インターフェース"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "インターフェース設定"
 
@@ -1574,7 +1627,7 @@ msgid "Internal"
 msgstr "内部"
 
 msgid "Internal Server Error"
-msgstr "内部サーバーエラー"
+msgstr "内部サーバー エラー"
 
 msgid "Invalid"
 msgstr "入力値が不正です"
@@ -1586,7 +1639,11 @@ msgid "Invalid VLAN ID given! Only unique IDs are allowed"
 msgstr "無効なVLAN IDです! ユニークなIDを入力してください。"
 
 msgid "Invalid username and/or password! Please try again."
-msgstr "ユーザー名とパスワードが不正です! もう一度入力してください。"
+msgstr ""
+"ユーザー名かパスワード、もしくは両方が不正です!もう一度入力してください。"
+
+msgid "Isolate Clients"
+msgstr ""
 
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1595,7 +1652,7 @@ msgstr ""
 "更新しようとしたイメージファイルはこのフラッシュメモリに適合しません。イメー"
 "ジファイルを確認してください!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "JavaScriptを有効にしてください!"
 
 msgid "Join Network"
@@ -1605,16 +1662,16 @@ msgid "Join Network: Wireless Scan"
 msgstr "ネットワークに接続する: 無線LANスキャン"
 
 msgid "Joining Network: %q"
-msgstr "次のネットワークに参加: %q"
+msgstr "ネットワークに接続: %q"
 
 msgid "Keep settings"
 msgstr "設定を保持する"
 
 msgid "Kernel Log"
-msgstr "カーネルログ"
+msgstr "カーネル ログ"
 
 msgid "Kernel Version"
-msgstr "カーネルバージョン"
+msgstr "カーネル バージョン"
 
 msgid "Key"
 msgstr "暗号キー"
@@ -1664,9 +1721,6 @@ msgstr "リース有効時間"
 msgid "Leasefile"
 msgstr "リースファイル"
 
-msgid "Leasetime"
-msgstr "リース時間"
-
 msgid "Leasetime remaining"
 msgstr "残りリース時間"
 
@@ -1710,6 +1764,22 @@ msgstr ""
 "問い合わせを転送する<abbr title=\"Domain Name System\">DNS</abbr> サーバーの"
 "リストを設定します"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr "認証用 SSH暗号キー ファイルのリスト"
 
@@ -1755,13 +1825,13 @@ msgid "Local Service Only"
 msgstr ""
 
 msgid "Local Startup"
-msgstr "ローカル Startup"
+msgstr "ローカル スタートアップ"
 
 msgid "Local Time"
 msgstr "時刻"
 
 msgid "Local domain"
-msgstr "ローカルドメイン"
+msgstr "ローカル ドメイン"
 
 msgid ""
 "Local domain specification. Names matching this domain are never forwarded "
@@ -1770,11 +1840,11 @@ msgstr ""
 
 msgid "Local domain suffix appended to DHCP names and hosts file entries"
 msgstr ""
-"DHCP名とhostsファイルのエントリーに付される、ローカルドメインサフィックスで"
+"DHCP名とhostsファイルのエントリーに付される、ローカルドメイン サフィックスで"
 "す。"
 
 msgid "Local server"
-msgstr "ローカルサーバー"
+msgstr "ローカル サーバー"
 
 msgid ""
 "Localise hostname depending on the requesting subnet if multiple IPs are "
@@ -1791,7 +1861,7 @@ msgid "Log output level"
 msgstr "ログ出力レベル"
 
 msgid "Log queries"
-msgstr "ログクエリー"
+msgstr "ログ クエリ"
 
 msgid "Logging"
 msgstr "ログ"
@@ -1813,7 +1883,7 @@ msgid "MAC-Address"
 msgstr "MAC-アドレス"
 
 msgid "MAC-Address Filter"
-msgstr "MAC-アドレスフィルタ"
+msgstr "MAC-アドレス フィルタ"
 
 msgid "MAC-Filter"
 msgstr "MAC-フィルタ"
@@ -1822,13 +1892,13 @@ msgid "MAC-List"
 msgstr "MAC-リスト"
 
 msgid "MAP / LW4over6"
-msgstr ""
+msgstr "MAP / LW4over6"
 
 msgid "MB/s"
 msgstr "MB/s"
 
 msgid "MD5"
-msgstr ""
+msgstr "MD5"
 
 msgid "MHz"
 msgstr "MHz"
@@ -1848,9 +1918,6 @@ msgstr "手動"
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "最大レート"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "DHCPリースの許可される最大数"
 
@@ -1888,21 +1955,21 @@ msgstr "メモリ使用率 (%)"
 msgid "Metric"
 msgstr "メトリック"
 
-msgid "Minimum Rate"
-msgstr "最小レート"
-
 msgid "Minimum hold time"
 msgstr "最短保持時間"
 
 msgid "Mirror monitor port"
-msgstr ""
+msgstr "ミラー監視ポート"
 
 msgid "Mirror source port"
-msgstr ""
+msgstr "ミラー元ポート"
 
 msgid "Missing protocol extension for proto %q"
 msgstr "プロトコル %qのプロトコル拡張が見つかりません"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "モード"
 
@@ -1910,7 +1977,7 @@ msgid "Model"
 msgstr "モデル"
 
 msgid "Modem device"
-msgstr "モデムデバイス"
+msgstr "モデム デバイス"
 
 msgid "Modem init timeout"
 msgstr "モデム初期化タイムアウト"
@@ -1961,26 +2028,26 @@ msgstr "下へ"
 msgid "Move up"
 msgstr "上へ"
 
-msgid "Multicast Rate"
-msgstr "マルチキャストレート"
-
 msgid "Multicast address"
-msgstr "マルチキャストアドレス"
+msgstr "マルチキャスト アドレス"
 
 msgid "NAS ID"
 msgstr "NAS ID"
 
 msgid "NAT-T Mode"
-msgstr ""
+msgstr "NAT-T モード"
 
 msgid "NAT64 Prefix"
 msgstr "NAT64 プレフィクス"
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr "NDP-プロキシ"
 
 msgid "NT Domain"
-msgstr ""
+msgstr "NT ドメイン"
 
 msgid "NTP server candidates"
 msgstr "NTPサーバー候補"
@@ -2007,13 +2074,13 @@ msgid "Network"
 msgstr "ネットワーク"
 
 msgid "Network Utilities"
-msgstr "ネットワークユーティリティ"
+msgstr "ネットワーク ユーティリティ"
 
 msgid "Network boot image"
-msgstr "ã\83\8dã\83\83ã\83\88ã\83¯ã\83¼ã\82¯ã\83»ã\83\96ã\83¼ã\83\88ç\94¨ã\82¤ã\83¡ã\83¼ã\82¸"
+msgstr "ネットワークブート用イメージ"
 
 msgid "Network without interfaces."
-msgstr ""
+msgstr "インターフェースの無いネットワークです。"
 
 msgid "Next »"
 msgstr "次 »"
@@ -2022,7 +2089,7 @@ msgid "No DHCP Server configured for this interface"
 msgstr "このインターフェースにはDHCPサーバーが設定されていません"
 
 msgid "No NAT-T"
-msgstr ""
+msgstr "NAT-Tを使用しない"
 
 msgid "No chains in this table"
 msgstr "チェイン内にルールがありません"
@@ -2043,7 +2110,7 @@ msgid "No network name specified"
 msgstr "ネットワーク名が設定されていません"
 
 msgid "No package lists available"
-msgstr "パッケージリストがありません"
+msgstr "パッケージ リストがありません"
 
 msgid "No password set!"
 msgstr "パスワードが設定されていません!"
@@ -2076,7 +2143,7 @@ msgid "Normal"
 msgstr "標準"
 
 msgid "Not Found"
-msgstr ""
+msgstr "見つかりません"
 
 msgid "Not associated"
 msgstr "アソシエーションされていません"
@@ -2119,18 +2186,18 @@ msgid ""
 "<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: "
 "<samp>eth0.1</samp>)."
 msgstr ""
-"このページではネットワークインターフェースの設定を行うことが出来ます。\"ブ"
-"ã\83ªã\83\83ã\82¸ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹\"ã\83\95ã\82£ã\83¼ã\83«ã\83\89ã\82\92ã\83\81ã\82§ã\83\83ã\82¯ã\81\97ã\80\81è¤\87æ\95°ã\81®ã\83\8dã\83\83ã\83\88ã\83¯ã\83¼ã\82¯ã\82¤ã\83³ã\82¿ã\83¼"
-"ã\83\95ã\82§ã\83¼ã\82¹å\90\8dã\82\92ã\82¹ã\83\9aã\83¼ã\82¹ã\81§å\8cºå\88\87ã\82\8aã\81§å\85¥å\8a\9bã\81\99ã\82\8bã\81\93ã\81¨ã\81§è¤\87æ\95°ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\82\92ã\83\96ã\83ªã\83\83ã\82¸"
-"ã\81\99ã\82\8bã\81\93ã\81¨ã\81\8cå\87ºæ\9d¥ã\81¾ã\81\99ã\80\82ã\81¾ã\81\9fã\80\81<samp>INTERFACE.VLANNR</samp>ã\81¨ã\81\84ã\81\86表è¨\98ã\81«ã\82\88ã\82\8a<abbr "
-"title=\"Virtual Local Area Network\">VLAN</abbr>も使用することが出来ます。"
-"(<abbr title=\"for example\">例</abbr>: <samp>eth0.1</samp>)"
+"このページではネットワーク インターフェースの設定を行うことが出来ます。\"ブ"
+"ã\83ªã\83\83ã\82¸ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹\"ã\83\95ã\82£ã\83¼ã\83«ã\83\89ã\81«ã\83\81ã\82§ã\83\83ã\82¯ã\82\92ä»\98ã\81\91ã\80\81è¤\87æ\95°ã\81®ã\83\8dã\83\83ã\83\88ã\83¯ã\83¼ã\82¯ ã\82¤ã\83³"
+"ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\82\92ã\83ªã\82¹ã\83\88ã\81\8bã\82\89é\81¸æ\8a\9eã\81\99ã\82\8bã\81\93ã\81¨ã\81§è¤\87æ\95°ã\81®ã\82¤ã\83³ã\82¿ã\83¼ã\83\95ã\82§ã\83¼ã\82¹ã\82\92ã\83\96ã\83ªã\83\83ã\82¸ã\81\99ã\82\8bã\81\93"
+"ã\81¨ã\81\8cå\87ºæ\9d¥ã\81¾ã\81\99ã\80\82ã\81¾ã\81\9fã\80\81<samp>INTERFACE.VLANNR</samp>ã\81¨ã\81\84ã\81\86表è¨\98ã\81«ã\82\88ã\82\8a<abbr title="
+"\"Virtual Local Area Network\">VLAN</abbr>も使用することが出来ます。(<abbr "
+"title=\"for example\">例</abbr>: <samp>eth0.1</samp>)"
 
 msgid "On-State Delay"
 msgstr "点灯時間"
 
 msgid "One of hostname or mac address must be specified!"
-msgstr "1つ以上のホスト名またはmacアドレスを設定してください!"
+msgstr "1つ以上のホスト名またはMACアドレスを設定してください!"
 
 msgid "One or more fields contain invalid values!"
 msgstr "1つ以上のフィールドに無効な値が設定されています!"
@@ -2156,18 +2223,30 @@ msgstr "変更されるオプション"
 msgid "Option removed"
 msgstr "削除されるオプション"
 
+msgid "Optional"
+msgstr "オプション"
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2177,20 +2256,24 @@ msgid ""
 "Optional. Host of peer. Names are resolved prior to bringing up the "
 "interface."
 msgstr ""
+"ピアのホストです。名前はインターフェースの起動前に解決されます。(オプショ"
+"ン)"
 
 msgid "Optional. Maximum Transmission Unit of tunnel interface."
-msgstr ""
+msgstr "トンネル インターフェースのMaximum Transmission Unit(オプション)"
 
 msgid "Optional. Port of peer."
-msgstr ""
+msgstr "ピアのポート(オプション)"
 
 msgid ""
 "Optional. Seconds between keep alive messages. Default is 0 (disabled). "
 "Recommended value if this device is behind a NAT is 25."
 msgstr ""
+"キープアライブ メッセージの送信間隔(秒)です。既定値: 0。このデバイスがNAT"
+"以下に存在する場合の推奨値は25です。(オプション)"
 
 msgid "Optional. UDP port used for outgoing and incoming packets."
-msgstr ""
+msgstr "発信パケットと受信パケットに使用されるUDPポート(オプション)"
 
 msgid "Options"
 msgstr "オプション"
@@ -2204,9 +2287,6 @@ msgstr "アウト"
 msgid "Outbound:"
 msgstr "送信:"
 
-msgid "Outdoor Channels"
-msgstr "屋外用周波数"
-
 msgid "Output Interface"
 msgstr "出力インターフェース"
 
@@ -2236,7 +2316,7 @@ msgstr ""
 "ネットから計算されます。"
 
 msgid "Override the table used for internal routes"
-msgstr ""
+msgstr "内部ルートに使用されるテーブルを上書きします。"
 
 msgid "Overview"
 msgstr "概要"
@@ -2256,6 +2336,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2287,7 +2370,7 @@ msgid "Package libiwinfo required!"
 msgstr "libiwinfo パッケージをインストールしてください!"
 
 msgid "Package lists are older than 24 hours"
-msgstr "パッケージリストは24時間以上前のものです"
+msgstr "パッケージ リストは24時間以上前のものです"
 
 msgid "Package name"
 msgstr "パッケージ名"
@@ -2308,11 +2391,14 @@ msgid "Password of Private Key"
 msgstr "秘密鍵のパスワード"
 
 msgid "Password of inner Private Key"
-msgstr ""
+msgstr "秘密鍵のパスワード"
 
 msgid "Password successfully changed!"
 msgstr "パスワードを変更しました"
 
+msgid "Password2"
+msgstr "パスワード2"
+
 msgid "Path to CA-Certificate"
 msgstr "CA証明書のパス"
 
@@ -2326,13 +2412,13 @@ msgid "Path to executable which handles the button event"
 msgstr "ボタンイベントをハンドルする実行ファイルのパス"
 
 msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "CA 証明書のパス"
 
 msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "クライアント証明書のパス"
 
 msgid "Path to inner Private Key"
-msgstr ""
+msgstr "秘密鍵のパス"
 
 msgid "Peak:"
 msgstr "ピーク:"
@@ -2341,7 +2427,7 @@ msgid "Peer IP address to assign"
 msgstr ""
 
 msgid "Peers"
-msgstr ""
+msgstr "ピア"
 
 msgid "Perfect Forward Secrecy"
 msgstr ""
@@ -2353,7 +2439,7 @@ msgid "Perform reset"
 msgstr "設定リセットを実行"
 
 msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "永続的なキープアライブ"
 
 msgid "Phy Rate:"
 msgstr "物理レート:"
@@ -2385,6 +2471,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr "委任されたプレフィクス (PD)"
+
 msgid "Preshared Key"
 msgstr "事前共有鍵"
 
@@ -2429,7 +2524,7 @@ msgid "Protocol of the new interface"
 msgstr "新しいインターフェースのプロトコル"
 
 msgid "Protocol support is not installed"
-msgstr "プロトコルサポートがインストールされていません"
+msgstr "プロトコル サポートがインストールされていません"
 
 msgid "Provide NTP server"
 msgstr "NTPサーバー機能を有効にする"
@@ -2452,11 +2547,17 @@ msgstr ""
 msgid "Quality"
 msgstr "クオリティ"
 
-msgid "RFC3947 NAT-T mode"
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
 msgstr ""
 
+msgid "RFC3947 NAT-T mode"
+msgstr "RFC3947 NAT-Tモード"
+
 msgid "RTS/CTS Threshold"
-msgstr "RTS/CTS値"
+msgstr "RTS/CTSしきい値"
 
 msgid "RX"
 msgstr "RX"
@@ -2468,7 +2569,7 @@ msgid "RaLink 802.11%s Wireless Controller"
 msgstr "RaLink 802.11%s 無線LANコントローラ"
 
 msgid "Radius-Accounting-Port"
-msgstr "Radiusアカウントサーバーポート番号"
+msgstr "Radiusアカウントサーバー ポート番号"
 
 msgid "Radius-Accounting-Secret"
 msgstr "Radiusアカウント秘密鍵"
@@ -2477,7 +2578,7 @@ msgid "Radius-Accounting-Server"
 msgstr "Radiusアカウントサーバー"
 
 msgid "Radius-Authentication-Port"
-msgstr "Radius認証サーバーポート番号"
+msgstr "Radius認証サーバー ポート番号"
 
 msgid "Radius-Authentication-Secret"
 msgstr "Radius認証秘密鍵"
@@ -2536,7 +2637,7 @@ msgid "Realtime Connections"
 msgstr "リアルタイム・コネクション"
 
 msgid "Realtime Graphs"
-msgstr "リアルタイムグラフ"
+msgstr "リアルタイム グラフ"
 
 msgid "Realtime Load"
 msgstr "リアルタイム・ロード"
@@ -2547,6 +2648,9 @@ msgstr "リアルタイム・トラフィック"
 msgid "Realtime Wireless"
 msgstr "リアルタイム・無線LAN"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "DNSリバインディング・プロテクション"
 
@@ -2566,7 +2670,7 @@ msgid "Receiver Antenna"
 msgstr "受信アンテナ"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
-msgstr "推奨。WireGuard インターフェースのIPアドレスです。"
+msgstr "WireGuard インターフェースのIPアドレスです。(推奨)"
 
 msgid "Reconnect this interface"
 msgstr "インターフェースの再接続"
@@ -2577,9 +2681,6 @@ msgstr "インターフェース再接続中"
 msgid "References"
 msgstr "参照カウンタ"
 
-msgid "Regulatory Domain"
-msgstr "規制ドメイン"
-
 msgid "Relay"
 msgstr "リレー"
 
@@ -2593,10 +2694,10 @@ msgid "Relay bridge"
 msgstr "リレーブリッジ"
 
 msgid "Remote IPv4 address"
-msgstr "リモートIPv4アドレス"
+msgstr "リモート IPv4アドレス"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "リモート IPv4アドレス または FQDN"
 
 msgid "Remove"
 msgstr "削除"
@@ -2614,15 +2715,21 @@ msgid "Request IPv6-address"
 msgstr "IPv6-アドレスのリクエスト"
 
 msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "リクエストするIPv6-プレフィクス長"
 
 msgid "Require TLS"
 msgstr "TLSが必要"
 
+msgid "Required"
+msgstr "必須"
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "DOCSIS 3.0を使用するいくつかのISPでは必要になります"
 
 msgid "Required. Base64-encoded private key for this interface."
+msgstr "このインターフェースに使用するBase64-エンコード 秘密鍵(必須)"
+
+msgid "Required. Base64-encoded public key of peer."
 msgstr ""
 
 msgid ""
@@ -2631,8 +2738,12 @@ msgid ""
 "routes through the tunnel."
 msgstr ""
 
-msgid "Required. Public key of peer."
+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 と、無線LANドライバーによるサポートが必要で"
+"す。<br />(2017年2月現在: ath9k 及び ath10k、LEDE内では mwlwifi 及び mt76)"
 
 msgid ""
 "Requires upstream supports DNSSEC; verify unsigned domain responses really "
@@ -2691,7 +2802,7 @@ msgid "Router Advertisement-Service"
 msgstr "ルーター アドバタイズメント-サービス"
 
 msgid "Router Password"
-msgstr "ルーターパスワード"
+msgstr "ルーター パスワード"
 
 msgid "Routes"
 msgstr "経路情報"
@@ -2775,9 +2886,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "クライアントの分離"
 
-msgid "Separate WDS"
-msgstr "WDSを分離する"
-
 msgid "Server Settings"
 msgstr "サーバー設定"
 
@@ -2801,6 +2909,11 @@ msgstr "サービスタイプ"
 msgid "Services"
 msgstr "サービス"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr "時刻同期設定"
 
@@ -2811,7 +2924,7 @@ msgid "Severely Errored Seconds (SES)"
 msgstr ""
 
 msgid "Short GI"
-msgstr ""
+msgstr "Short GI"
 
 msgid "Show current backup file list"
 msgstr "現在のバックアップファイルのリストを表示する"
@@ -2938,9 +3051,6 @@ msgstr "静的リース"
 msgid "Static Routes"
 msgstr "静的ルーティング"
 
-msgid "Static WDS"
-msgstr "静的WDS"
-
 msgid "Static address"
 msgstr "静的アドレス"
 
@@ -3009,10 +3119,10 @@ msgid "System Log"
 msgstr "システムログ"
 
 msgid "System Properties"
-msgstr "システムプロパティ"
+msgstr "システム プロパティ"
 
 msgid "System log buffer size"
-msgstr "システムログバッファサイズ"
+msgstr "システムログ バッファサイズ"
 
 msgid "TCP:"
 msgstr "TCP:"
@@ -3082,7 +3192,7 @@ msgstr ""
 "<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."
@@ -3134,7 +3244,7 @@ msgid ""
 msgstr ""
 
 msgid "The length of the IPv6 prefix in bits"
-msgstr ""
+msgstr "IPv6 プレフィクスの長さ (bit) です。"
 
 msgid "The local IPv4 address over which the tunnel is created (optional)."
 msgstr ""
@@ -3147,12 +3257,18 @@ 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=\"Virtual Local Area Network\">VLAN</abbr> にまとめることができま"
+"す。 <abbr title=\"Virtual Local Area Network\">VLAN</abbr> は、異なるネット"
+"ワーク セグメントの分離にしばしば用いられます。通常、インターネットなどより上"
+"位のネットワークへの接続に使用するアップリンク ポートと、ローカル ネットワー"
+"ク用のその他のポートが存在します。"
 
 msgid "The selected protocol needs a device assigned"
 msgstr "選択中のプロトコルを使用する場合、デバイスを設定する必要があります"
 
 msgid "The submitted security token is invalid or already expired!"
-msgstr ""
+msgstr "送信されたセキュリティ トークンは無効もしくは期限切れです!"
 
 msgid ""
 "The system is erasing the configuration partition now and will reboot itself "
@@ -3236,21 +3352,21 @@ msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
 "front of 'exit 0') to execute them at the end of the boot process."
 msgstr ""
-"/etc/rc.localを表示しています。あなたの実行したいコマンドを'exit 0'行より上に"
-"入力してください。これらのコマンドはブートプロセスの最後に実行されます。"
+"/etc/rc.localを表示しています。実行したいコマンドを'exit 0'行より上に入力して"
+"ください。これらのコマンドはブートプロセスの最後に実行されます。"
 
 msgid ""
 "This is the local endpoint address assigned by the tunnel broker, it usually "
 "ends with <code>:2</code>"
 msgstr ""
-"プロバイダからアサインされた、ローカルのエンドポイントアドレスです。通常、"
+"プロバイダからアサインされた、ローカルのエンドポイント アドレスです。通常、"
 "<code>:2</code>が終端に設定されます。"
 
 msgid ""
 "This is the only <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</"
 "abbr> in the local network"
 msgstr ""
-"ローカルネットワーク内のみの <abbr title=\"Dynamic Host Configuration "
+"ローカル ネットワーク内のみの <abbr title=\"Dynamic Host Configuration "
 "Protocol\">DHCP</abbr>として使用する"
 
 msgid "This is the plain username for logging into the account"
@@ -3262,7 +3378,7 @@ msgstr ""
 
 msgid "This is the system crontab in which scheduled tasks can be defined."
 msgstr ""
-"スケジュールタスクシステムを使用することで、定期的に特定のタスクの実行を行う"
+"スケジュールタスク システムを使用することで、定期的に特定のタスクの実行を行う"
 "ことが可能です。"
 
 msgid ""
@@ -3298,7 +3414,7 @@ msgid ""
 "To restore configuration files, you can upload a previously generated backup "
 "archive here."
 msgstr ""
-"設定を復元するには、作成しておいたバックアップアーカイブをアップロードしてく"
+"設定を復元するには、作成しておいたバックアップ アーカイブをアップロードしてく"
 "ださい。"
 
 msgid "Tone"
@@ -3352,9 +3468,6 @@ msgstr "トンネルセットアップ サーバー"
 msgid "Tunnel type"
 msgstr "トンネルタイプ"
 
-msgid "Turbo Mode"
-msgstr "ターボモード"
-
 msgid "Tx-Power"
 msgstr "送信電力"
 
@@ -3380,7 +3493,7 @@ msgid "UUID"
 msgstr "UUID"
 
 msgid "Unable to dispatch"
-msgstr ""
+msgstr "ディスパッチできません"
 
 msgid "Unavailable Seconds (UAS)"
 msgstr ""
@@ -3411,13 +3524,13 @@ msgid ""
 "Check \"Keep settings\" to retain the current configuration (requires a "
 "compatible firmware image)."
 msgstr ""
-"システムをアップデートする場合、sysupgrade機能に互換性のあるファームウェアイ"
-"ã\83¡ã\83¼ã\82¸ã\82\92ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82\"設å®\9aã\81®ä¿\9dæ\8c\81\"ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81¨ã\80\81ç\8f¾å\9c¨ã\81®è¨­å®\9aã\82\92"
-"維持してアップデートを行います。ただし、OpenWrt/LEDE互換のファームウェアイ"
-"メージがアップロードされた場合のみ、設定は保持されます。"
+"システムをアップデートする場合、sysupgrade機能に互換性のあるファームウェア イ"
+"ã\83¡ã\83¼ã\82¸ã\82\92ã\81\93ã\81\93ã\81«ã\82¢ã\83\83ã\83\97ã\83­ã\83¼ã\83\89ã\81\97ã\81¦ã\81\8fã\81 ã\81\95ã\81\84ã\80\82\"設å®\9aã\81®ä¿\9dæ\8c\81\"ã\82\92æ\9c\89å\8a¹ã\81«ã\81\99ã\82\8bã\81¨ã\80\81ç\8f¾å\9c¨ã\81®"
+"設定を維持してアップデートを行います(互換性のあるファームウェア イメージが必"
+"要)。"
 
 msgid "Upload archive..."
-msgstr "アーカイブをアップロード"
+msgstr "アーカイブをアップロード..."
 
 msgid "Uploaded File"
 msgstr "アップロード完了"
@@ -3438,10 +3551,10 @@ msgid "Use ISO/IEC 3166 alpha2 country codes."
 msgstr "ISO/IEC 3166 alpha2の国コードを使用します。"
 
 msgid "Use MTU on tunnel interface"
-msgstr "トンネルインターフェースのMTUを設定"
+msgstr "トンネル インターフェースのMTUを設定"
 
 msgid "Use TTL on tunnel interface"
-msgstr "トンネルインターフェースのTTLを設定"
+msgstr "トンネル インターフェースのTTLを設定"
 
 msgid "Use as external overlay (/overlay)"
 msgstr "外部オーバーレイとして使用する (/overlay)"
@@ -3450,7 +3563,7 @@ msgid "Use as root filesystem (/)"
 msgstr "ルート ファイルシステムとして使用する (/)"
 
 msgid "Use broadcast flag"
-msgstr "ブロードキャストフラグを使用する"
+msgstr "ブロードキャスト フラグを使用する"
 
 msgid "Use builtin IPv6-management"
 msgstr "ビルトインのIPv6-マネジメントを使用する"
@@ -3459,13 +3572,13 @@ msgid "Use custom DNS servers"
 msgstr "DNSサーバーを手動で設定"
 
 msgid "Use default gateway"
-msgstr "デフォルトゲートウェイを使用する"
+msgstr "デフォルト ゲートウェイを使用する"
 
 msgid "Use gateway metric"
-msgstr "ゲートウェイメトリックを使用する"
+msgstr "ゲートウェイ メトリックを使用する"
 
 msgid "Use routing table"
-msgstr ""
+msgstr "ルーティング テーブルの使用"
 
 msgid ""
 "Use the <em>Add</em> Button to add a new lease entry. The <em>MAC-Address</"
@@ -3485,11 +3598,16 @@ msgstr "使用"
 msgid "Used Key Slot"
 msgstr "使用するキースロット"
 
-msgid "User certificate (PEM encoded)"
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
 msgstr ""
 
+msgid "User certificate (PEM encoded)"
+msgstr "ユーザー証明書(PEM エンコード)"
+
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "ユーザー秘密鍵(PEM エンコード)"
 
 msgid "Username"
 msgstr "ユーザー名"
@@ -3501,7 +3619,7 @@ msgid "VDSL"
 msgstr "VDSL"
 
 msgid "VLANs on %q"
-msgstr "%q上のVLANs"
+msgstr "%q上のVLAN"
 
 msgid "VLANs on %q (%s)"
 msgstr "%q上のVLAN (%s)"
@@ -3522,7 +3640,7 @@ msgid "VPN Server's certificate SHA1 hash"
 msgstr "VPN サーバー証明書 SHA1ハッシュ"
 
 msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr ""
+msgstr "VPNC (CISCO 3000 (またはその他の) VPN)"
 
 msgid "Vendor"
 msgstr "ベンダー"
@@ -3531,7 +3649,7 @@ msgid "Vendor Class to send when requesting DHCP"
 msgstr "DHCPリクエスト送信時のベンダークラスを設定"
 
 msgid "Verbose"
-msgstr ""
+msgstr "詳細"
 
 msgid "Verbose logging by aiccu daemon"
 msgstr ""
@@ -3579,7 +3697,7 @@ msgid "Waiting for command to complete..."
 msgstr "コマンド実行中です..."
 
 msgid "Waiting for device..."
-msgstr "ã\83\87ã\83\90ã\82¤ã\82¹ã\81®èµ·å\8b\95ã\82\92ã\81\8aå¾\85ã\81¡ã\81\8fã\81 ã\81\95ã\81\84..."
+msgstr "ã\83\87ã\83\90ã\82¤ã\82¹ã\82\92èµ·å\8b\95中ã\81§ã\81\99..."
 
 msgid "Warning"
 msgstr "警告"
@@ -3638,9 +3756,6 @@ msgstr "受信したDNSリクエストをsyslogへ記録します"
 msgid "Write system log to file"
 msgstr "システムログをファイルに書き込む"
 
-msgid "XR Support"
-msgstr "XRサポート"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3652,8 +3767,8 @@ msgstr ""
 "</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
-msgstr "Java Scriptを有効にしない場合、LuCIは正しく動作しません。"
+"You must enable JavaScript in your browser or LuCI will not work properly."
+msgstr "JavaScriptを有効にしない場合、LuCIは正しく動作しません。"
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3670,9 +3785,6 @@ msgstr "全て"
 msgid "auto"
 msgstr "自動"
 
-msgid "automatic"
-msgstr "自動"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3746,8 +3858,8 @@ msgstr "ローカル <abbr title=\"Domain Name System\">DNS</abbr>ファイル"
 msgid "minimum 1280, maximum 1480"
 msgstr "最小値 1280、最大値 1480"
 
-msgid "navigation Navigation"
-msgstr ""
+msgid "minutes"
+msgstr ""
 
 msgid "no"
 msgstr "いいえ"
@@ -3782,12 +3894,6 @@ msgstr "routed"
 msgid "server mode"
 msgstr "サーバー モード"
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr "ステートフルのみ"
 
@@ -3800,6 +3906,9 @@ msgstr "ステートレス + ステートフル"
 msgid "tagged"
 msgstr "tagged"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "不明"
 
@@ -3820,18 +3929,3 @@ msgstr "はい"
 
 msgid "« Back"
 msgstr "« 戻る"
-
-#~ msgid "An additional network will be created if you leave this unchecked."
-#~ msgstr "チェックボックスがオフの場合、追加のネットワークが作成されます。"
-
-#~ msgid "Join Network: Settings"
-#~ msgstr "ネットワークに接続する: 設定"
-
-#~ msgid "CPU"
-#~ msgstr "CPU"
-
-#~ msgid "Port %d"
-#~ msgstr "ポート %d"
-
-#~ msgid "VLAN Interface"
-#~ msgstr "VLANインターフェース"
index 8053b1a..2e8d209 100644 (file)
@@ -52,12 +52,36 @@ msgstr "1 분 부하:"
 msgid "15 Minute Load:"
 msgstr "15 분 부하:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "5 분 부하:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 
@@ -124,6 +148,11 @@ msgstr "<abbr title=\"maximal\">최대</abbr> 동시 처리 query 수"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -142,9 +171,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr ""
-
 msgid "ARP retry threshold"
 msgstr ""
 
@@ -382,15 +408,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "연결된 station 들"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -463,9 +483,6 @@ msgstr ""
 msgid "Back to scan results"
 msgstr ""
 
-msgid "Background Scan"
-msgstr ""
-
 msgid "Backup / Flash Firmware"
 msgstr "Firmware 백업 / Flash"
 
@@ -634,7 +651,11 @@ msgstr "명령어"
 msgid "Common Configuration"
 msgstr "공통 설정"
 
-msgid "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
 msgstr ""
 
 msgid "Configuration"
@@ -859,10 +880,10 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
+msgid "Disabled"
 msgstr ""
 
-msgid "Disabled"
+msgid "Disabled (default)"
 msgstr ""
 
 msgid "Discard upstream RFC1918 responses"
@@ -902,9 +923,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr ""
 
@@ -1007,6 +1025,9 @@ msgstr "VLAN 기능 활성화"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1031,6 +1052,11 @@ msgstr "활성/비활성"
 msgid "Enabled"
 msgstr "활성화됨"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "이 bridge 에 Spanning Tree Protocol 활성화합니다"
 
@@ -1077,6 +1103,12 @@ msgstr "임대한 주소의 유효 시간.  최소값은  2 분 (<code>2m</code>
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "외부 system log 서버"
 
@@ -1089,9 +1121,6 @@ msgstr "외부 system log 서버 프로토콜"
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr ""
 
@@ -1127,6 +1156,9 @@ msgstr ""
 msgid "Firewall"
 msgstr "방화벽"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "방화벽 설정"
 
@@ -1172,6 +1204,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1418,9 +1453,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-주소"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1433,7 +1474,7 @@ msgstr ""
 msgid "Identity"
 msgstr ""
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1515,6 +1556,9 @@ msgstr "설치된 패키지"
 msgid "Interface"
 msgstr "인터페이스"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "인터페이스 설정"
 
@@ -1560,12 +1604,15 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr ""
 
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1634,9 +1681,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr "임대 시간"
-
 msgid "Leasetime remaining"
 msgstr "남아있는 임대 시간"
 
@@ -1679,6 +1723,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1812,9 +1872,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Active DHCP lease 건의 최대 허용 숫자"
 
@@ -1850,9 +1907,6 @@ msgstr "메모리 사용량 (%)"
 msgid "Metric"
 msgstr ""
 
-msgid "Minimum Rate"
-msgstr ""
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1865,6 +1919,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr ""
 
@@ -1921,9 +1978,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr ""
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1936,6 +1990,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2116,18 +2173,30 @@ msgstr "변경된 option"
 msgid "Option removed"
 msgstr "삭제된 option"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2164,9 +2233,6 @@ msgstr ""
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2216,6 +2282,9 @@ msgstr ""
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2273,6 +2342,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr ""
 
@@ -2345,6 +2417,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2410,6 +2491,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2493,6 +2580,9 @@ msgstr "실시간 트래픽"
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2523,9 +2613,6 @@ msgstr "인터페이스 재연결중입니다"
 msgid "References"
 msgstr ""
 
-msgid "Regulatory Domain"
-msgstr ""
-
 msgid "Relay"
 msgstr ""
 
@@ -2565,19 +2652,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "특정 ISP 들에 요구됨.  예: Charter (DOCSIS 3 기반)"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2719,9 +2814,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr "서버 설정"
 
@@ -2745,6 +2837,11 @@ msgstr ""
 msgid "Services"
 msgstr "서비스"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2879,9 +2976,6 @@ msgstr "Static Lease 들"
 msgid "Static Routes"
 msgstr "Static Route 경로"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3268,9 +3362,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr ""
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3401,6 +3492,11 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3551,9 +3647,6 @@ msgstr "받은 DNS 요청 내용을 systlog 에 기록합니다"
 msgid "Write system log to file"
 msgstr "System log 출력 파일 경로"
 
-msgid "XR Support"
-msgstr ""
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3565,7 +3658,7 @@ msgstr ""
 "다!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3580,9 +3673,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3656,7 +3746,7 @@ msgstr "local <abbr title=\"Domain Name System\">DNS</abbr> 파일"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3692,12 +3782,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3710,6 +3794,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3730,3 +3817,6 @@ msgstr ""
 
 msgid "« Back"
 msgstr ""
+
+#~ msgid "Leasetime"
+#~ msgstr "임대 시간"
index 9230896..c907bf3 100644 (file)
@@ -52,12 +52,36 @@ msgstr ""
 msgid "15 Minute Load:"
 msgstr ""
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr ""
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -121,6 +145,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -139,9 +168,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr "AR-Penyokong"
-
 msgid "ARP retry threshold"
 msgstr ""
 
@@ -377,15 +403,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Associated Stesen"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Authentifizierung"
 
@@ -458,9 +478,6 @@ msgstr "Kembali ke ikhtisar"
 msgid "Back to scan results"
 msgstr "Kembali ke keputusan scan"
 
-msgid "Background Scan"
-msgstr "Latar Belakang Scan"
-
 msgid "Backup / Flash Firmware"
 msgstr ""
 
@@ -616,8 +633,12 @@ msgstr "Perintah"
 msgid "Common Configuration"
 msgstr ""
 
-msgid "Compression"
-msgstr "Mampatan"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Konfigurasi"
@@ -832,12 +853,12 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Mematikan pemasa HW-Beacon"
-
 msgid "Disabled"
 msgstr ""
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
 
@@ -877,9 +898,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr "Jangan menghantar jawapan penyelidikan"
-
 msgid "Domain required"
 msgstr "Domain diperlukan"
 
@@ -979,6 +997,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1003,6 +1024,11 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Aktifkan spanning Tree Protokol di jambatan ini"
 
@@ -1049,6 +1075,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1061,9 +1093,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Frame Cepat"
-
 msgid "File"
 msgstr ""
 
@@ -1099,6 +1128,9 @@ msgstr "Selesai"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Tetapan Firewall"
 
@@ -1144,6 +1176,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1389,9 +1424,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1404,7 +1445,7 @@ msgstr ""
 msgid "Identity"
 msgstr "Identiti"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1491,6 +1532,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Interface"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1536,6 +1580,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Username dan / atau password tak sah! Sila cuba lagi."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1544,7 +1591,7 @@ msgstr ""
 "Tampak bahawa anda cuba untuk flash fail gambar yang tidak sesuai dengan "
 "memori flash, sila buat pengesahan pada fail gambar!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 #, fuzzy
@@ -1614,9 +1661,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Sewa fail"
 
-msgid "Leasetime"
-msgstr "Masa penyewaan"
-
 msgid "Leasetime remaining"
 msgstr "Sisa masa penyewaan"
 
@@ -1658,6 +1702,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1790,9 +1850,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Rate Maksimum"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1829,9 +1886,6 @@ msgstr "Penggunaan Memori (%)"
 msgid "Metric"
 msgstr "Metrik"
 
-msgid "Minimum Rate"
-msgstr "Rate Minimum"
-
 #, fuzzy
 msgid "Minimum hold time"
 msgstr "Memegang masa minimum"
@@ -1845,6 +1899,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mode"
 
@@ -1903,9 +1960,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr "Multicast Rate"
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1918,6 +1972,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2097,18 +2154,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2145,9 +2214,6 @@ msgstr "Keluar"
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr "Saluran Outdoor"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2195,6 +2261,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2252,6 +2321,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Path ke CA-Sijil"
 
@@ -2324,6 +2396,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2389,6 +2470,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2469,6 +2556,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2499,9 +2589,6 @@ msgstr ""
 msgid "References"
 msgstr "Rujukan"
 
-msgid "Regulatory Domain"
-msgstr "Peraturan Domain"
-
 msgid "Relay"
 msgstr ""
 
@@ -2541,19 +2628,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2695,9 +2790,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Pisahkan Pelanggan"
 
-msgid "Separate WDS"
-msgstr "Pisahkan WDS"
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2721,6 +2813,11 @@ msgstr ""
 msgid "Services"
 msgstr "Perkhidmatan"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2856,9 +2953,6 @@ msgstr "Statische Einträge"
 msgid "Static Routes"
 msgstr "Laluan Statik"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3242,9 +3336,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Mod Turbo"
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3367,6 +3458,11 @@ msgstr "Diguna"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3519,9 +3615,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Sokongan XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3529,7 +3622,7 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3544,9 +3637,6 @@ msgstr ""
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr "automatik"
-
 msgid "baseT"
 msgstr ""
 
@@ -3618,7 +3708,7 @@ msgstr "Fail DNS tempatan"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3654,12 +3744,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3672,6 +3756,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3692,3 +3779,51 @@ msgstr ""
 
 msgid "« Back"
 msgstr "« Kembali"
+
+#~ msgid "Leasetime"
+#~ msgstr "Masa penyewaan"
+
+#~ msgid "automatic"
+#~ msgstr "automatik"
+
+#~ msgid "AR Support"
+#~ msgstr "AR-Penyokong"
+
+#~ msgid "Background Scan"
+#~ msgstr "Latar Belakang Scan"
+
+#~ msgid "Compression"
+#~ msgstr "Mampatan"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Mematikan pemasa HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Jangan menghantar jawapan penyelidikan"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Frame Cepat"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Rate Maksimum"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Rate Minimum"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicast Rate"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Saluran Outdoor"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Peraturan Domain"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Pisahkan WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Mod Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Sokongan XR"
index 5afca4f..4c67d5d 100644 (file)
@@ -47,12 +47,36 @@ msgstr "1 minutts belastning:"
 msgid "15 Minute Load:"
 msgstr "15 minutters belastning:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "5 minutters belastning:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -123,6 +147,11 @@ msgstr "<abbr title=\"Maksimal\">Maks.</abbr> samtidige spørringer"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Parvis: %s / Gruppe: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -141,9 +170,6 @@ msgstr ""
 msgid "APN"
 msgstr "<abbr title=\"Aksesspunkt Navn\">APN</abbr>"
 
-msgid "AR Support"
-msgstr "AR Støtte"
-
 msgid "ARP retry threshold"
 msgstr "APR terskel for nytt forsøk"
 
@@ -386,15 +412,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Tilkoblede Klienter"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s Trådløs Kontroller"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Godkjenning"
 
@@ -467,9 +487,6 @@ msgstr "Tilbake til oversikt"
 msgid "Back to scan results"
 msgstr "Tilbake til skanne resultat"
 
-msgid "Background Scan"
-msgstr "Bakgrunns Skanning"
-
 msgid "Backup / Flash Firmware"
 msgstr "Sikkerhetskopiering/Firmware oppgradering"
 
@@ -638,8 +655,12 @@ msgstr "Kommando"
 msgid "Common Configuration"
 msgstr "Vanlige Innstillinger"
 
-msgid "Compression"
-msgstr "Komprimering"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Konfigurasjon"
@@ -860,12 +881,12 @@ msgstr "Deaktiver DNS oppsett"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Deaktiver HW-Beacon timer"
-
 msgid "Disabled"
 msgstr "Deaktivert"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Forkast oppstrøms RFC1918 svar"
 
@@ -906,9 +927,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Ikke videresend reverserte oppslag for lokale nettverk"
 
-msgid "Do not send probe responses"
-msgstr "Ikke send probe svar"
-
 msgid "Domain required"
 msgstr "Domene kreves"
 
@@ -1014,6 +1032,9 @@ msgstr "Aktiver VLAN funksjonalitet"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Aktiver 'læring' og 'aldring'"
 
@@ -1038,6 +1059,11 @@ msgstr "Aktiver/Deaktiver"
 msgid "Enabled"
 msgstr "Aktivert"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Aktiverer Spanning Tree Protocol på denne broen"
 
@@ -1085,6 +1111,12 @@ msgstr "Utløpstid på leide adresser, minimum er 2 minutter (<code>2m</code>)."
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Ekstern systemlogg server"
 
@@ -1097,9 +1129,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Fast Frames"
-
 msgid "File"
 msgstr "Fil"
 
@@ -1135,6 +1164,9 @@ msgstr "Fullfør"
 msgid "Firewall"
 msgstr "Brannmur"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Brannmur Innstillinger"
 
@@ -1181,6 +1213,9 @@ msgstr "Bruk TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Bruk TKIP og CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1428,9 +1463,15 @@ msgstr "IPv6 prefikslengde"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-Adresse"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-i-IPv4 (RFC4213)"
 
@@ -1443,7 +1484,7 @@ msgstr "IPv6-over-IPv4 (6til4)"
 msgid "Identity"
 msgstr "Identitet"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1529,6 +1570,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"
 
@@ -1574,6 +1618,9 @@ msgstr "Ugyldig VLAN ID gitt! Bare unike ID'er er tillatt"
 msgid "Invalid username and/or password! Please try again."
 msgstr "Ugyldig brukernavn og/eller passord! Vennligst prøv igjen."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1582,8 +1629,8 @@ msgstr ""
 "Det virker som du prøver å flashe med en firmware som ikke passer inn i "
 "flash-minnet, vennligst kontroller firmware filen!"
 
-msgid "Java Script required!"
-msgstr "Java Script kreves!"
+msgid "JavaScript required!"
+msgstr "JavaScript kreves!"
 
 msgid "Join Network"
 msgstr "Koble til nettverket"
@@ -1651,9 +1698,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"
 
@@ -1697,6 +1741,22 @@ msgstr ""
 "Liste med <abbr title=\"Domain Name System\">DNS</abbr> servere som "
 "forespørsler blir videresendt til"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1835,9 +1895,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Maksimal hastighet"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Maksimalt antall aktive DHCP leieavtaler"
 
@@ -1873,9 +1930,6 @@ msgstr "Minne forbruk (%)"
 msgid "Metric"
 msgstr "Metrisk"
 
-msgid "Minimum Rate"
-msgstr "Minimum hastighet"
-
 msgid "Minimum hold time"
 msgstr "Minimum holde tid"
 
@@ -1888,6 +1942,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Mangler protokoll utvidelse for proto %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Modus"
 
@@ -1946,9 +2003,6 @@ msgstr "Flytt ned"
 msgid "Move up"
 msgstr "Flytt opp"
 
-msgid "Multicast Rate"
-msgstr "Multicast hastighet"
-
 msgid "Multicast address"
 msgstr "Multicast adresse"
 
@@ -1961,6 +2015,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2141,18 +2198,30 @@ msgstr "Innstilling endret"
 msgid "Option removed"
 msgstr "Innstilling fjernet"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2189,9 +2258,6 @@ msgstr "Ut"
 msgid "Outbound:"
 msgstr "Ugående:"
 
-msgid "Outdoor Channels"
-msgstr "Utendørs Kanaler"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2241,6 +2307,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2298,6 +2367,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Passordet er endret!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Sti til CA-sertifikat"
 
@@ -2370,6 +2442,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2437,6 +2518,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Kvalitet"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2530,6 +2617,9 @@ msgstr "Trafikk Sanntid"
 msgid "Realtime Wireless"
 msgstr "Trådløst i sanntid"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Binde beskyttelse"
 
@@ -2560,9 +2650,6 @@ msgstr "Kobler til igjen"
 msgid "References"
 msgstr "Referanser"
 
-msgid "Regulatory Domain"
-msgstr "Regulerende Domene"
-
 msgid "Relay"
 msgstr "Relay"
 
@@ -2602,19 +2689,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Er nødvendig for noen nettleverandører, f.eks Charter med DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2758,9 +2853,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Separerte Klienter"
 
-msgid "Separate WDS"
-msgstr "Separert WDS"
-
 msgid "Server Settings"
 msgstr "Server Innstillinger"
 
@@ -2784,6 +2876,11 @@ msgstr "Tjeneste type"
 msgid "Services"
 msgstr "Tjenester"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Oppsett tidssynkronisering"
@@ -2923,9 +3020,6 @@ msgstr "Statiske Leier"
 msgid "Static Routes"
 msgstr "Statiske Ruter"
 
-msgid "Static WDS"
-msgstr "Statisk WDS"
-
 msgid "Static address"
 msgstr "Statisk adresse"
 
@@ -3347,9 +3441,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Turbo Modus"
-
 msgid "Tx-Power"
 msgstr "Tx-Styrke"
 
@@ -3479,6 +3570,11 @@ msgstr "Brukt"
 msgid "Used Key Slot"
 msgstr "Brukte Nøkler"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3631,9 +3727,6 @@ msgstr "Skriv mottatte DNS forespørsler til syslog"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "XR Støtte"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3645,9 +3738,9 @@ msgstr ""
 "utilgjengelig! </strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Du må aktivere Java Script i nettleseren din ellers vil ikke LuCI fungere "
+"Du må aktivere JavaScript i nettleseren din ellers vil ikke LuCI fungere "
 "skikkelig."
 
 msgid ""
@@ -3662,9 +3755,6 @@ msgstr "enhver"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3738,7 +3828,7 @@ msgstr "lokal <abbr title=\"Domain Navn System\">DNS</abbr>-fil"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3774,12 +3864,6 @@ msgstr "rutet"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3792,6 +3876,9 @@ msgstr ""
 msgid "tagged"
 msgstr "tagget"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "ukjent"
 
@@ -3813,6 +3900,57 @@ msgstr "ja"
 msgid "« Back"
 msgstr "« Tilbake"
 
+#~ msgid "Leasetime"
+#~ msgstr "<abbr title=\"Leasetime\">Leietid</abbr>"
+
+#~ msgid "AR Support"
+#~ msgstr "AR Støtte"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s Trådløs Kontroller"
+
+#~ msgid "Background Scan"
+#~ msgstr "Bakgrunns Skanning"
+
+#~ msgid "Compression"
+#~ msgstr "Komprimering"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Deaktiver HW-Beacon timer"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Ikke send probe svar"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Fast Frames"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Maksimal hastighet"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Minimum hastighet"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicast hastighet"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Utendørs Kanaler"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Regulerende Domene"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Separert WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Statisk WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo Modus"
+
+#~ msgid "XR Support"
+#~ msgstr "XR Støtte"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Et nytt nettverk vil bli opprettet hvis du tar bort haken."
 
index 30302ce..5a2d86b 100644 (file)
@@ -53,12 +53,36 @@ msgstr "Obciążenie 1 min.:"
 msgid "15 Minute Load:"
 msgstr "Obciążenie 15 min.:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Obciążenie 5 min.:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -128,6 +152,11 @@ msgstr "<abbr title=\"Maksymalna ilość\">Maks.</abbr> zapytań równoczesnych"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Par: %s / Grup: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -146,10 +175,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-# Wydaje mi się że brakuje litery R...
-msgid "AR Support"
-msgstr "Wsparcie dla ARP"
-
 msgid "ARP retry threshold"
 msgstr "Próg powtórzeń ARP"
 
@@ -401,15 +426,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Połączone stacje"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Bezprzewodowy kontroler Atheros 802.11%s"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Uwierzytelnianie"
 
@@ -483,9 +502,6 @@ msgstr "Wróć do przeglądu"
 msgid "Back to scan results"
 msgstr "Wróć do wyników skanowania"
 
-msgid "Background Scan"
-msgstr "Skanowanie w tle"
-
 msgid "Backup / Flash Firmware"
 msgstr "Kopia zapasowa/aktualizacja firmware"
 
@@ -657,8 +673,12 @@ msgstr "Polecenie"
 msgid "Common Configuration"
 msgstr "Konfiguracja podstawowa"
 
-msgid "Compression"
-msgstr "Kompresja"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Konfiguracja"
@@ -882,12 +902,12 @@ msgstr "Wyłącz konfigurowanie DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Wyłącz zegar HW-Beacon"
-
 msgid "Disabled"
 msgstr "Wyłączony"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Odrzuć wychodzące odpowiedzi RFC1918"
 
@@ -930,9 +950,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Nie przekazuj odwrotnych lookup`ów do sieci lokalnych"
 
-msgid "Do not send probe responses"
-msgstr "Nie wysyłaj ramek probe response"
-
 msgid "Domain required"
 msgstr "Wymagana domena"
 
@@ -1041,6 +1058,9 @@ msgstr "Włącz funkcjonalność VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Włącz uczenie się i starzenie"
 
@@ -1065,6 +1085,11 @@ msgstr "Wlącz/Wyłącz"
 msgid "Enabled"
 msgstr "Włączony"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 "Włącz protokół <abbr title=\"Spanning Tree Protocol\">STP</abbr> na tym "
@@ -1116,6 +1141,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Zewnętrzny serwer dla loga systemowego"
 
@@ -1128,9 +1159,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Szybkie ramki (Fast Frames)"
-
 msgid "File"
 msgstr "Plik"
 
@@ -1166,6 +1194,9 @@ msgstr "Zakończ"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 # Nie ma potrzeby pisania z dużej litery
 msgid "Firewall Settings"
 msgstr "Ustawienia firewalla"
@@ -1213,6 +1244,9 @@ msgstr "Wymuś TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Wymuś TKIP i CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1465,9 +1499,15 @@ msgstr "Długość prefiksu IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Adres IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-w-IPv4 (RFC4213)"
 
@@ -1481,7 +1521,7 @@ msgstr "IPv6-przez-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Tożsamość"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1572,6 +1612,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"
 
@@ -1619,6 +1662,9 @@ msgstr "Podano niewłaściwy ID VLAN`u! Dozwolone są tylko unikalne ID."
 msgid "Invalid username and/or password! Please try again."
 msgstr "Niewłaściwy login i/lub hasło! Spróbuj ponownie."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1627,8 +1673,8 @@ msgstr ""
 "Wygląda na to, że próbujesz wgrać obraz większy niż twoja pamięć flash, "
 "proszę sprawdź czy to właściwy obraz!"
 
-msgid "Java Script required!"
-msgstr "Java Script jest wymagany!"
+msgid "JavaScript required!"
+msgstr "JavaScript jest wymagany!"
 
 msgid "Join Network"
 msgstr "Połącz z siecią"
@@ -1696,9 +1742,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"
 
@@ -1742,6 +1785,22 @@ msgstr ""
 "Lista serwerów <abbr title=\"Domain Name System\">DNS</abbr> do których będą "
 "przekazywane zapytania"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1881,9 +1940,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Maksymalna Szybkość"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Maksymalna dozwolona liczba aktywnych dzierżaw DHCP"
 
@@ -1919,9 +1975,6 @@ msgstr "Użycie pamięci (%)"
 msgid "Metric"
 msgstr "Metryka"
 
-msgid "Minimum Rate"
-msgstr "Minimalna Szybkość"
-
 msgid "Minimum hold time"
 msgstr "Minimalny czas podtrzymania"
 
@@ -1934,6 +1987,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Brakujące rozszerzenie protokołu dla protokołu %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Tryb"
 
@@ -1992,9 +2048,6 @@ msgstr "Przesuń w dół"
 msgid "Move up"
 msgstr "Przesuń w górę"
 
-msgid "Multicast Rate"
-msgstr "Szybkość Multicast`u"
-
 msgid "Multicast address"
 msgstr "Adres Multicast`u"
 
@@ -2007,6 +2060,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2186,18 +2242,30 @@ msgstr "Wartość zmieniona"
 msgid "Option removed"
 msgstr "Usunięto wartość"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2234,9 +2302,6 @@ msgstr "Wychodzące"
 msgid "Outbound:"
 msgstr "Wychodzący:"
 
-msgid "Outdoor Channels"
-msgstr "Kanały zewnętrzne"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2286,6 +2351,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2343,6 +2411,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Pomyślnie zmieniono hasło!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Ścieżka do certyfikatu CA"
 
@@ -2417,6 +2488,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2485,6 +2565,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Jakość"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2579,6 +2665,9 @@ msgstr "Ruch w czasie rzeczywistym"
 msgid "Realtime Wireless"
 msgstr "WiFi w czasie rzeczywistym"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Przypisz ochronę"
 
@@ -2609,9 +2698,6 @@ msgstr "Łączę ponownie interfejs"
 msgid "References"
 msgstr "Referencje"
 
-msgid "Regulatory Domain"
-msgstr "Domena regulacji"
-
 msgid "Relay"
 msgstr "Przekaźnik"
 
@@ -2651,19 +2737,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Wymagany dla niektórych dostawców internetu, np. Charter z DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2809,9 +2903,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Rozdziel klientów"
 
-msgid "Separate WDS"
-msgstr "Rozdziel WDS"
-
 msgid "Server Settings"
 msgstr "Ustawienia serwera"
 
@@ -2835,6 +2926,11 @@ msgstr "Typ serwisu"
 msgid "Services"
 msgstr "Serwisy"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Ustawienia synchronizacji czasu"
@@ -2976,9 +3072,6 @@ msgstr "Dzierżawy statyczne"
 msgid "Static Routes"
 msgstr "Statyczne ścieżki routingu"
 
-msgid "Static WDS"
-msgstr "Statyczny WDS"
-
 msgid "Static address"
 msgstr "Stały adres"
 
@@ -3410,9 +3503,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Tryb Turbo"
-
 msgid "Tx-Power"
 msgstr "Moc nadawania"
 
@@ -3543,6 +3633,11 @@ msgstr "Użyte"
 msgid "Used Key Slot"
 msgstr "Użyte gniazdo klucza"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3696,9 +3791,6 @@ msgstr "Zapisz otrzymane żądania DNS do syslog'a"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Wsparcie XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3710,9 +3802,9 @@ msgstr ""
 "się nieosiągalne!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Musisz włączyć obsługę Java Script w swojej przeglądarce, inaczej LuCI nie "
+"Musisz włączyć obsługę JavaScript w swojej przeglądarce, inaczej LuCI nie "
 "będzie działać poprawnie."
 
 msgid ""
@@ -3727,9 +3819,6 @@ msgstr "dowolny"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3803,7 +3892,7 @@ msgstr "lokalny plik <abbr title=\"Domain Name System\">DNS</abbr>"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3840,12 +3929,6 @@ msgstr "routowane"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3858,6 +3941,9 @@ msgstr ""
 msgid "tagged"
 msgstr "tagowane"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "nieznane"
 
@@ -3879,6 +3965,58 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Bezprzewodowy kontroler Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "Skanowanie w tle"
+
+#~ msgid "Compression"
+#~ msgstr "Kompresja"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Wyłącz zegar HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Nie wysyłaj ramek probe response"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Szybkie ramki (Fast Frames)"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Maksymalna Szybkość"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Minimalna Szybkość"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Szybkość Multicast`u"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Kanały zewnętrzne"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domena regulacji"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Rozdziel WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Statyczny WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Tryb Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Wsparcie XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr ""
 #~ "Zostanie utworzona dodatkowa sieć jeśli zostawisz tą opcję niezaznaczoną."
index 3ce99b6..64ab904 100644 (file)
@@ -1,20 +1,20 @@
 msgid ""
 msgstr ""
-"Project-Id-Version: PACKAGE VERSION\n"
+"Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
 "POT-Creation-Date: 2009-06-10 03:41+0200\n"
-"PO-Revision-Date: 2014-03-29 23:31+0200\n"
-"Last-Translator: Luiz Angelo <luizluca@gmail.com>\n"
-"Language-Team: LANGUAGE <LL@li.org>\n"
+"PO-Revision-Date: 2017-02-22 20:30-0300\n"
+"Last-Translator: Luiz Angelo Daros de Luca <luizluca@gmail.com>\n"
 "Language: pt_BR\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
 "Content-Transfer-Encoding: 8bit\n"
 "Plural-Forms: nplurals=2; plural=(n > 1);\n"
-"X-Generator: Pootle 2.0.6\n"
+"X-Generator: Poedit 1.8.11\n"
+"Language-Team: \n"
 
 msgid "%s is untagged in multiple VLANs!"
-msgstr ""
+msgstr "%s está sem etiqueta em múltiplas VLANs!"
 
 msgid "(%d minute window, %d second interval)"
 msgstr "(janela de %d minutos, intervalo de %d segundos)"
@@ -38,13 +38,15 @@ msgid "-- custom --"
 msgstr "-- personalizado --"
 
 msgid "-- match by device --"
-msgstr ""
+msgstr "-- casar por dispositivo --"
 
 msgid "-- match by label --"
-msgstr ""
+msgstr "-- casar por rótulo --"
 
 msgid "-- match by uuid --"
 msgstr ""
+"-- casar por <abbr title=\"Universal Unique IDentifier/Identificador Único "
+"Universal\">UUID</abbr> --"
 
 msgid "1 Minute Load:"
 msgstr "Carga 1 Minuto:"
@@ -52,12 +54,38 @@ msgstr "Carga 1 Minuto:"
 msgid "15 Minute Load:"
 msgstr "Carga 15 Minutos:"
 
+msgid "4-character hexadecimal ID"
+msgstr "Identificador hexadecimal de 4 caracteres"
+
 msgid "464XLAT (CLAT)"
-msgstr ""
+msgstr "464XLAT (CLAT)"
 
 msgid "5 Minute Load:"
 msgstr "Carga 5 Minutos:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+"Identificador de 6 octetos como uma cadeia hexadecimal - sem dois pontos"
+
+msgid "802.11r Fast Transition"
+msgstr "802.11r Fast Transition"
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr "Tempo de expiração máximo da consulta da Associação SA do 802.11w"
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+"Tempo de expiração de tentativa de consulta da Associação SA do 802.11w"
+
+msgid "802.11w Management Frame Protection"
+msgstr "Proteção do Quadro de Gerenciamento do 802.11w"
+
+msgid "802.11w maximum timeout"
+msgstr "Estouro de tempo máximo do 802.11w"
+
+msgid "802.11w retry timeout"
+msgstr "Estouro de tempo da nova tentativa do 802.11w"
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 "<abbr title=\"Identificador de Conjunto Básico de Serviços\">BSSID</abbr>"
@@ -103,6 +131,8 @@ msgstr "Roteador <abbr title=\"Protocolo de Internet Versão 6\">IPv6</abbr>"
 
 msgid "<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"
 msgstr ""
+"<abbr title=\"Internet Protocol Version 6/Protocolo Internet Versão "
+"6\">IPv6</abbr>-Suffix (hex)"
 
 msgid "<abbr title=\"Light Emitting Diode\">LED</abbr> Configuration"
 msgstr "Configuração do <abbr title=\"Diodo Emissor de Luz\">LED</abbr>"
@@ -133,43 +163,53 @@ msgstr "Número máximo de consultas concorrentes"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Par: %s / Grupo: %s'>%s - %s</abbr>"
 
-msgid "A43C + J43 + A43"
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
 msgstr ""
 
+msgid "A43C + J43 + A43"
+msgstr "A43C + J43 + A43"
+
 msgid "A43C + J43 + A43 + V43"
-msgstr ""
+msgstr "A43C + J43 + A43 + V43"
 
 msgid "ADSL"
 msgstr ""
+"<abbr title=\"Assymetrical Digital Subscriber Line/Linha Digital Assimétrica "
+"para Assinante\">ADSL</abbr>"
 
 msgid "AICCU (SIXXS)"
 msgstr ""
+"<abbr title=\"Automatic IPv6 Connectivity Client Utility/Utilitário Cliente "
+"de Conectividade IPv6 Automática\">AICCU (SIXXS)</abbr>"
 
 msgid "ANSI T1.413"
-msgstr ""
+msgstr "ANSI T1.413"
 
 msgid "APN"
 msgstr "<abbr title=\"Access Point Name\">APN</abbr>"
 
-msgid "AR Support"
-msgstr "Suporte AR"
-
 msgid "ARP retry threshold"
 msgstr ""
 "Limite de retentativas do <abbr title=\"Address Resolution Protocol\">ARP</"
 "abbr>"
 
 msgid "ATM (Asynchronous Transfer Mode)"
-msgstr ""
+msgstr "ATM (Asynchronous Transfer Mode)"
 
 msgid "ATM Bridges"
 msgstr "Ponte ATM"
 
 msgid "ATM Virtual Channel Identifier (VCI)"
-msgstr "Identificador de Canal Virtual ATM (VCI)"
+msgstr ""
+"Identificador de Canal Virtual ATM (<abbr title=\"Virtual Channel Identifier"
+"\">VCI</abbr>)"
 
 msgid "ATM Virtual Path Identifier (VPI)"
-msgstr "Identificador de Caminho Virtual ATM (VPI)"
+msgstr ""
+"Identificador de Caminho Virtual ATM (<abbr title=\"Virtual Path Identifier"
+"\">VPI</abbr>)"
 
 msgid ""
 "ATM bridges expose encapsulated ethernet in AAL5 connections as virtual "
@@ -184,10 +224,10 @@ msgid "ATM device number"
 msgstr "Número do dispositivo ATM"
 
 msgid "ATU-C System Vendor ID"
-msgstr ""
+msgstr "Identificador de"
 
 msgid "AYIYA"
-msgstr ""
+msgstr "AYIYA"
 
 msgid "Access Concentrator"
 msgstr "Concentrador de Acesso"
@@ -237,7 +277,7 @@ msgid "Additional Hosts files"
 msgstr "Arquivos adicionais de equipamentos conhecidos (hosts)"
 
 msgid "Additional servers file"
-msgstr ""
+msgstr "Arquivo de servidores adicionais"
 
 msgid "Address"
 msgstr "Endereço"
@@ -253,6 +293,8 @@ msgstr "Opções Avançadas"
 
 msgid "Aggregate Transmit Power(ACTATP)"
 msgstr ""
+"Potência de Transmissão Agregada (<abbr title=\"Aggregate Transmit Power"
+"\">ACTATP</abbr>)"
 
 msgid "Alert"
 msgstr "Alerta"
@@ -261,9 +303,11 @@ msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
 "address"
 msgstr ""
+"Alocar endereços IP sequencialmente, iniciando a partir do endereço mais "
+"baixo disponível"
 
 msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "Alocar endereços IP sequencialmente"
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
 msgstr ""
@@ -296,78 +340,81 @@ msgstr ""
 "exemplo, para os serviços RBL"
 
 msgid "Allowed IPs"
-msgstr ""
+msgstr "Endereços IP autorizados"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
 "\">Tunneling Comparison</a> on SIXXS"
 msgstr ""
+"Veja também a <a href=\"https://www.sixxs.net/faq/connectivity/?"
+"faq=comparison\">Comparação de Tunelamentos</a> em SIXXS"
 
 msgid "Always announce default router"
-msgstr ""
+msgstr "Sempre anuncie o roteador padrão"
 
 msgid "Annex"
-msgstr ""
+msgstr "Anexo"
 
 msgid "Annex A + L + M (all)"
-msgstr ""
+msgstr "Anexos A + L + M (todo)"
 
 msgid "Annex A G.992.1"
-msgstr ""
+msgstr "Anexo A G.992.1"
 
 msgid "Annex A G.992.2"
-msgstr ""
+msgstr "Anexo A G.992.2"
 
 msgid "Annex A G.992.3"
-msgstr ""
+msgstr "Anexo A G.992.3"
 
 msgid "Annex A G.992.5"
-msgstr ""
+msgstr "Anexo A G.992.5"
 
 msgid "Annex B (all)"
-msgstr ""
+msgstr "Anexo B (todo)"
 
 msgid "Annex B G.992.1"
-msgstr ""
+msgstr "Anexo B G.992.1"
 
 msgid "Annex B G.992.3"
-msgstr ""
+msgstr "Anexo B G.992.3"
 
 msgid "Annex B G.992.5"
-msgstr ""
+msgstr "Anexo B G.992.5"
 
 msgid "Annex J (all)"
-msgstr ""
+msgstr "Anexo J (todo)"
 
 msgid "Annex L G.992.3 POTS 1"
-msgstr ""
+msgstr "Anexo L G.992.3 POTS 1"
 
 msgid "Annex M (all)"
-msgstr ""
+msgstr "Anexo M (todo)"
 
 msgid "Annex M G.992.3"
-msgstr ""
+msgstr "Anexo M G.992.3"
 
 msgid "Annex M G.992.5"
-msgstr ""
+msgstr "Anexo M G.992.5"
 
 msgid "Announce as default router even if no public prefix is available."
 msgstr ""
+"Anuncie-se como rotador padrão mesmo se não existir um prefixo público."
 
 msgid "Announced DNS domains"
-msgstr ""
+msgstr "Domínios DNS anunciados"
 
 msgid "Announced DNS servers"
-msgstr ""
+msgstr "Servidores DNS anunciados"
 
 msgid "Anonymous Identity"
-msgstr ""
+msgstr "Identidade Anônima"
 
 msgid "Anonymous Mount"
-msgstr ""
+msgstr "Montagem Anônima"
 
 msgid "Anonymous Swap"
-msgstr ""
+msgstr "Espaço de Troca (swap) Anônimo"
 
 msgid "Antenna 1"
 msgstr "Antena 1"
@@ -390,6 +437,8 @@ msgstr "Aplicar as alterações"
 msgid ""
 "Assign a part of given length of every public IPv6-prefix to this interface"
 msgstr ""
+"Atribua uma parte do comprimento de cada prefixo IPv6 público para esta "
+"interface"
 
 msgid "Assign interfaces..."
 msgstr "atribuir as interfaces"
@@ -397,24 +446,20 @@ msgstr "atribuir as interfaces"
 msgid ""
 "Assign prefix parts using this hexadecimal subprefix ID for this interface."
 msgstr ""
+"Atribua partes do prefixo usando este identificador hexadecimal do "
+"subprefixo para esta interface"
 
 msgid "Associated Stations"
 msgstr "Estações associadas"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Controlador Wireless Atheros 802.11%s"
-
 msgid "Auth Group"
-msgstr ""
-
-msgid "AuthGroup"
-msgstr ""
+msgstr "Grupo de Autenticação"
 
 msgid "Authentication"
 msgstr "Autenticação"
 
 msgid "Authentication Type"
-msgstr ""
+msgstr "Tipo de Autenticação"
 
 msgid "Authoritative"
 msgstr "Autoritário"
@@ -426,25 +471,29 @@ msgid "Auto Refresh"
 msgstr "Atualização Automática"
 
 msgid "Automatic"
-msgstr ""
+msgstr "Automático"
 
 msgid "Automatic Homenet (HNCP)"
 msgstr ""
+"Rede Doméstica Automática (<abbr title=\"Homenet Control Protocol\">HNCP</"
+"abbr>)"
 
 msgid "Automatically check filesystem for errors before mounting"
 msgstr ""
+"Execute automaticamente a verificação do sistema de arquivos antes da "
+"montagem do dispositivo"
 
 msgid "Automatically mount filesystems on hotplug"
-msgstr ""
+msgstr "Monte automaticamente o espaço de troca (swap) ao conectar"
 
 msgid "Automatically mount swap on hotplug"
-msgstr ""
+msgstr "Monte automaticamente o espaço de troca (swap) ao conectar"
 
 msgid "Automount Filesystem"
-msgstr ""
+msgstr "Montagem Automática de Sistema de Arquivo"
 
 msgid "Automount Swap"
-msgstr ""
+msgstr "Montagem Automática do Espaço de Troca (swap) "
 
 msgid "Available"
 msgstr "Disponível"
@@ -456,13 +505,13 @@ msgid "Average:"
 msgstr "Média:"
 
 msgid "B43 + B43C"
-msgstr ""
+msgstr "B43 + B43C"
 
 msgid "B43 + B43C + V43"
-msgstr ""
+msgstr "B43 + B43C + V43"
 
 msgid "BR / DMR / AFTR"
-msgstr ""
+msgstr "BR / DMR / AFTR"
 
 msgid "BSSID"
 msgstr "BSSID"
@@ -482,9 +531,6 @@ msgstr "Voltar para visão geral"
 msgid "Back to scan results"
 msgstr "Voltar para os resultados da busca"
 
-msgid "Background Scan"
-msgstr "Busca em Segundo Plano"
-
 msgid "Backup / Flash Firmware"
 msgstr "Cópia de Segurança / Gravar Firmware"
 
@@ -498,10 +544,10 @@ msgid "Bad address specified!"
 msgstr "Endereço especificado está incorreto!"
 
 msgid "Band"
-msgstr ""
+msgstr "Banda"
 
 msgid "Behind NAT"
-msgstr ""
+msgstr "Atrás da NAT"
 
 msgid ""
 "Below is the determined list of files to backup. It consists of changed "
@@ -513,13 +559,15 @@ msgstr ""
 "padrões para a cópia de segurança definidos pelo usuário."
 
 msgid "Bind interface"
-msgstr ""
+msgstr "Interface Vinculada"
 
 msgid "Bind only to specific interfaces rather than wildcard address."
 msgstr ""
+"Vincule somente para as explicitamenteinterfaces ao invés do endereço "
+"coringa."
 
 msgid "Bind the tunnel to this interface (optional)."
-msgstr ""
+msgstr "Vincule o túnel a esta interface (opcional)"
 
 msgid "Bitrate"
 msgstr "Taxa de bits"
@@ -552,12 +600,15 @@ msgid ""
 "Build/distribution specific feed definitions. This file will NOT be "
 "preserved in any sysupgrade."
 msgstr ""
+"Fonte de pacotes específico da compilação/distribuição. Esta NÃO será "
+"preservada em qualquer atualização do sistema."
 
 msgid "Buttons"
 msgstr "Botões"
 
 msgid "CA certificate; if empty it will be saved after the first connection."
 msgstr ""
+"Certificado da CA; se em branco, será salvo depois da primeira conexão."
 
 msgid "CPU usage (%)"
 msgstr "Uso da CPU (%)"
@@ -566,7 +617,7 @@ msgid "Cancel"
 msgstr "Cancelar"
 
 msgid "Category"
-msgstr ""
+msgstr "Categoria"
 
 msgid "Chain"
 msgstr "Cadeia"
@@ -588,9 +639,10 @@ msgstr "Verificar"
 
 msgid "Check fileystems before mount"
 msgstr ""
+"Execute a verificação do sistema de arquivos antes da montagem do dispositivo"
 
 msgid "Check this option to delete the existing networks from this radio."
-msgstr ""
+msgstr "Marque esta opção para remover as redes existentes neste rádio."
 
 msgid "Checksum"
 msgstr "Soma de verificação"
@@ -617,7 +669,7 @@ msgid "Cipher"
 msgstr "Cifra"
 
 msgid "Cisco UDP encapsulation"
-msgstr ""
+msgstr "Encapsulamento UDP da Cisco"
 
 msgid ""
 "Click \"Generate archive\" to download a tar archive of the current "
@@ -654,8 +706,12 @@ msgstr "Comando"
 msgid "Common Configuration"
 msgstr "Configuração Comum"
 
-msgid "Compression"
-msgstr "Compressão"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuração"
@@ -679,7 +735,7 @@ msgid "Connection Limit"
 msgstr "Limite de conexão"
 
 msgid "Connection to server fails when TLS cannot be used"
-msgstr ""
+msgstr "A conexão para este servidor falhará quando o TLS não puder ser usado"
 
 msgid "Connections"
 msgstr "Conexões"
@@ -715,15 +771,17 @@ msgid "Custom Interface"
 msgstr "Interface Personalizada"
 
 msgid "Custom delegated IPv6-prefix"
-msgstr ""
+msgstr "Prefixo IPv6 delegado personalizado"
 
 msgid ""
 "Custom feed definitions, e.g. private feeds. This file can be preserved in a "
 "sysupgrade."
 msgstr ""
+"Definições de fonte de pacotes personalizadas, ex: fontes privadas. Este "
+"arquivo será preservado em uma atualização do sistema."
 
 msgid "Custom feeds"
-msgstr ""
+msgstr "Fontes de pacotes customizadas"
 
 msgid ""
 "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
@@ -751,13 +809,13 @@ msgid "DHCPv6 Leases"
 msgstr "Alocações DHCPv6"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "Cliente DHCPv6"
 
 msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "Modo DHCPv6"
 
 msgid "DHCPv6-Service"
-msgstr ""
+msgstr "Serviço DHCPv6"
 
 msgid "DNS"
 msgstr "DNS"
@@ -766,34 +824,34 @@ msgid "DNS forwardings"
 msgstr "Encaminhamentos DNS"
 
 msgid "DNS-Label / FQDN"
-msgstr ""
+msgstr "Rótulo DNS / FQDN"
 
 msgid "DNSSEC"
-msgstr ""
+msgstr "DNSSEC"
 
 msgid "DNSSEC check unsigned"
-msgstr ""
+msgstr "Verificar DNSSEC sem assinatura"
 
 msgid "DPD Idle Timeout"
-msgstr ""
+msgstr "Tempo de expiração para ociosidade do DPD"
 
 msgid "DS-Lite AFTR address"
-msgstr ""
+msgstr "Endereço DS-Lite AFTR"
 
 msgid "DSL"
-msgstr ""
+msgstr "DSL"
 
 msgid "DSL Status"
-msgstr ""
+msgstr "Estado da DSL"
 
 msgid "DSL line mode"
-msgstr ""
+msgstr "Modo de linha DSL"
 
 msgid "DUID"
 msgstr "DUID"
 
 msgid "Data Rate"
-msgstr ""
+msgstr "Taxa de Dados"
 
 msgid "Debug"
 msgstr "Depurar"
@@ -805,10 +863,10 @@ msgid "Default gateway"
 msgstr "Roteador Padrão"
 
 msgid "Default is stateless + stateful"
-msgstr ""
+msgstr "O padrão é sem estado + com estado"
 
 msgid "Default route"
-msgstr ""
+msgstr "Rota padrão"
 
 msgid "Default state"
 msgstr "Estado padrão"
@@ -847,10 +905,10 @@ msgid "Device Configuration"
 msgstr "Configuração do Dispositivo"
 
 msgid "Device is rebooting..."
-msgstr ""
+msgstr "O dispositivo está reiniciando..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "Dispositivo não alcançável"
 
 msgid "Diagnostics"
 msgstr "Diagnóstico"
@@ -875,14 +933,14 @@ msgid "Disable DNS setup"
 msgstr "Desabilita a configuração do DNS"
 
 msgid "Disable Encryption"
-msgstr ""
-
-msgid "Disable HW-Beacon timer"
-msgstr "Desativar temporizador de Beacon de Hardware"
+msgstr "Desabilitar Cifragem"
 
 msgid "Disabled"
 msgstr "Desabilitado"
 
+msgid "Disabled (default)"
+msgstr "Desabilitado (padrão)"
+
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
 "Descartar respostas de servidores externos para redes privadas (RFC1918)"
@@ -897,7 +955,7 @@ msgid "Distance to farthest network member in meters."
 msgstr "Distância para o computador mais distante da rede (em metros)."
 
 msgid "Distribution feeds"
-msgstr ""
+msgstr "Fontes de pacotes da distribuição"
 
 msgid "Diversity"
 msgstr "Diversidade"
@@ -926,9 +984,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Não encaminhe buscas por endereço reverso das redes local"
 
-msgid "Do not send probe responses"
-msgstr "Não enviar respostas de exames"
-
 msgid "Domain required"
 msgstr "Requerer domínio"
 
@@ -936,7 +991,7 @@ msgid "Domain whitelist"
 msgstr "Lista branca de domínios"
 
 msgid "Don't Fragment"
-msgstr ""
+msgstr "Não Fragmentar"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
@@ -964,7 +1019,7 @@ msgstr ""
 "integrado"
 
 msgid "Dual-Stack Lite (RFC6333)"
-msgstr ""
+msgstr "Duas Pilhas Leve (RFC6333)"
 
 msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
 msgstr ""
@@ -982,7 +1037,7 @@ msgstr ""
 "somente os clientes com atribuições estáticas serão servidos. "
 
 msgid "EA-bits length"
-msgstr ""
+msgstr "Comprimento dos bits EA"
 
 msgid "EAP-Method"
 msgstr "Método EAP"
@@ -994,6 +1049,8 @@ msgid ""
 "Edit the raw configuration data above to fix any error and hit \"Save\" to "
 "reload the page."
 msgstr ""
+"Edite os dados de configuração brutos abaixo para arrumar qualquer erro e "
+"clique em \"Salvar\" para recarregar a página."
 
 msgid "Edit this interface"
 msgstr "Editar esta interface"
@@ -1014,7 +1071,7 @@ msgid "Enable HE.net dynamic endpoint update"
 msgstr "Ativar a atualização de ponto final dinâmico HE.net"
 
 msgid "Enable IPv6 negotiation"
-msgstr ""
+msgstr "Ativar a negociação de IPv6"
 
 msgid "Enable IPv6 negotiation on the PPP link"
 msgstr "Ativar a negociação de IPv6 no enlace PPP"
@@ -1026,7 +1083,7 @@ msgid "Enable NTP client"
 msgstr "Ativar o cliente <abbr title=\"Network Time Protocol\">NTP</abbr>"
 
 msgid "Enable Single DES"
-msgstr ""
+msgstr "Habilitar DES Simples"
 
 msgid "Enable TFTP server"
 msgstr "Ativar servidor TFTP"
@@ -1035,19 +1092,22 @@ msgid "Enable VLAN functionality"
 msgstr "Ativar funcionalidade de VLAN"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
+msgstr "Habilite o botão WPS. requer WPA(2)-PSK"
+
+msgid "Enable key reinstallation (KRACK) countermeasures"
 msgstr ""
 
 msgid "Enable learning and aging"
 msgstr "Ativar o aprendizado e obsolescência"
 
 msgid "Enable mirroring of incoming packets"
-msgstr ""
+msgstr "Habilitar espelhamento dos pacotes entrantes"
 
 msgid "Enable mirroring of outgoing packets"
-msgstr ""
+msgstr "Habilitar espelhamento dos pacotes saintes"
 
 msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
-msgstr ""
+msgstr "Habilita o campo DF (Não Fragmentar) dos pacotes encapsulados."
 
 msgid "Enable this mount"
 msgstr "Ativar esta montagem"
@@ -1061,6 +1121,13 @@ msgstr "Ativar/Desativar"
 msgid "Enabled"
 msgstr "Ativado"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+"Ativa a troca rápida entre pontos de acesso que pertencem ao mesmo Domínio "
+"de Mobilidade"
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Ativa o protocolo STP nesta ponte"
 
@@ -1071,10 +1138,10 @@ msgid "Encryption"
 msgstr "Cifragem"
 
 msgid "Endpoint Host"
-msgstr ""
+msgstr "Equipamento do ponto final"
 
 msgid "Endpoint Port"
-msgstr ""
+msgstr "Porta do ponto final"
 
 msgid "Erasing..."
 msgstr "Apagando..."
@@ -1083,7 +1150,7 @@ msgid "Error"
 msgstr "Erro"
 
 msgid "Errored seconds (ES)"
-msgstr ""
+msgstr "Segundos com erro (ES)"
 
 msgid "Ethernet Adapter"
 msgstr "Adaptador Ethernet"
@@ -1092,7 +1159,7 @@ msgid "Ethernet Switch"
 msgstr "Switch Ethernet"
 
 msgid "Exclude interfaces"
-msgstr ""
+msgstr "Excluir interfaces"
 
 msgid "Expand hosts"
 msgstr "Expandir arquivos de equipamentos conhecidos (hosts)"
@@ -1100,7 +1167,6 @@ msgstr "Expandir arquivos de equipamentos conhecidos (hosts)"
 msgid "Expires"
 msgstr "Expira"
 
-#, fuzzy
 msgid ""
 "Expiry time of leased addresses, minimum is 2 minutes (<code>2m</code>)."
 msgstr ""
@@ -1108,7 +1174,13 @@ msgstr ""
 "code>)."
 
 msgid "External"
-msgstr ""
+msgstr "Externo"
+
+msgid "External R0 Key Holder List"
+msgstr "Lista dos Detentor de Chave R0 Externa"
+
+msgid "External R1 Key Holder List"
+msgstr "Lista dos Detentor de Chave R1 Externa"
 
 msgid "External system log server"
 msgstr "Servidor externo de registros do sistema (syslog)"
@@ -1117,13 +1189,10 @@ msgid "External system log server port"
 msgstr "Porta do servidor externo de registro do sistema (syslog)"
 
 msgid "External system log server protocol"
-msgstr ""
+msgstr "Protocolo do servidor externo de registro do sistema (syslog)"
 
 msgid "Extra SSH command options"
-msgstr ""
-
-msgid "Fast Frames"
-msgstr "Quadros Rápidos"
+msgstr "Opções adicionais do comando SSH"
 
 msgid "File"
 msgstr "Arquivo"
@@ -1147,6 +1216,9 @@ msgid ""
 "Find all currently attached filesystems and swap and replace configuration "
 "with defaults based on what was detected"
 msgstr ""
+"Encontre todos os sistemas de arquivos e espaços de troca (swap) atualmente "
+"conectados e substitua a configuração com valores padrão baseados no que foi "
+"detectado"
 
 msgid "Find and join network"
 msgstr "Procurar e conectar à rede"
@@ -1160,6 +1232,9 @@ msgstr "Terminar"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Configurações do Firewall"
 
@@ -1167,7 +1242,7 @@ msgid "Firewall Status"
 msgstr "Estado do Firewall"
 
 msgid "Firmware File"
-msgstr ""
+msgstr "Arquivo da Firmware"
 
 msgid "Firmware Version"
 msgstr "Versão do Firmware"
@@ -1205,17 +1280,22 @@ msgstr "Forçar TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forçar TKIP e CCMP (AES)"
 
-msgid "Force use of NAT-T"
+msgid "Force link"
 msgstr ""
 
+msgid "Force use of NAT-T"
+msgstr "Force o uso do NAT-T"
+
 msgid "Form token mismatch"
-msgstr ""
+msgstr "Chave eletrônica do formulário não casa"
 
 msgid "Forward DHCP traffic"
 msgstr "Encaminhar tráfego DHCP"
 
 msgid "Forward Error Correction Seconds (FECS)"
 msgstr ""
+"Segundos a frente de correção de erros ( <abbr title=\"Forward Error "
+"Correction Seconds\">FECS</abbr>)"
 
 msgid "Forward broadcast traffic"
 msgstr "Encaminhar tráfego broadcast"
@@ -1239,6 +1319,8 @@ msgid ""
 "Further information about WireGuard interfaces and peers at <a href=\"http://"
 "wireguard.io\">wireguard.io</a>."
 msgstr ""
+"Mais informações sobre interfaces e parceiros WireGuard em <a href=\"http://"
+"wireguard.io\">wireguard.io</a>."
 
 msgid "GHz"
 msgstr "GHz"
@@ -1259,10 +1341,10 @@ msgid "General Setup"
 msgstr "Configurações Gerais"
 
 msgid "General options for opkg"
-msgstr ""
+msgstr "Opções gerais para o opkg"
 
 msgid "Generate Config"
-msgstr ""
+msgstr "Gerar Configuração"
 
 msgid "Generate archive"
 msgstr "Gerar arquivo"
@@ -1274,10 +1356,10 @@ msgid "Given password confirmation did not match, password not changed!"
 msgstr "A senha de confirmação informada não casa. Senha não alterada!"
 
 msgid "Global Settings"
-msgstr ""
+msgstr "Configurações Globais"
 
 msgid "Global network options"
-msgstr ""
+msgstr "Opções de rede globais"
 
 msgid "Go to password configuration..."
 msgstr "Ir para a configuração de senha..."
@@ -1286,19 +1368,21 @@ msgid "Go to relevant configuration page"
 msgstr "Ir para a página de configuração pertinente"
 
 msgid "Group Password"
-msgstr ""
+msgstr "Senha do Grupo"
 
 msgid "Guest"
-msgstr ""
+msgstr "Convidado\t"
 
 msgid "HE.net password"
 msgstr "Senha HE.net"
 
 msgid "HE.net username"
-msgstr ""
+msgstr "Usuário do HE.net"
 
 msgid "HT mode (802.11n)"
 msgstr ""
+"Modo <abbr title=\"High Throughput/Alta Taxa de Transferência\">HT</abbr>  "
+"(802.11n)"
 
 # Não sei que contexto isto está sendo usado
 msgid "Handler"
@@ -1309,9 +1393,11 @@ msgstr "Suspender"
 
 msgid "Header Error Code Errors (HEC)"
 msgstr ""
+"Erros de Código de Erro de Cabeçalho (<abbr title=\"Header Error Code\">HEC</"
+"abbr>)"
 
 msgid "Heartbeat"
-msgstr ""
+msgstr "Pulso de vida"
 
 msgid ""
 "Here you can configure the basic aspects of your device like its hostname or "
@@ -1336,7 +1422,7 @@ msgstr ""
 "\">ESSID</abbr>"
 
 msgid "Host"
-msgstr ""
+msgstr "Equipamento"
 
 msgid "Host entries"
 msgstr "Entradas de Equipamentos"
@@ -1359,13 +1445,15 @@ msgid "Hostnames"
 msgstr "Nome dos equipamentos"
 
 msgid "Hybrid"
-msgstr ""
+msgstr "Híbrido"
 
 msgid "IKE DH Group"
 msgstr ""
+"Grupo <abbr title=\"Diffie-Hellman\">DH</abbr>  do <abbr title=\"Internet "
+"Key Exchange/Troca de Chaves na Internet\">IKE</abbr>"
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "Endereços IP"
 
 msgid "IP address"
 msgstr "Endereço IP"
@@ -1386,7 +1474,7 @@ msgid "IPv4 and IPv6"
 msgstr "IPv4 e IPv6"
 
 msgid "IPv4 assignment length"
-msgstr ""
+msgstr "Tamanho da atribuição IPv4"
 
 msgid "IPv4 broadcast"
 msgstr "Broadcast IPv4"
@@ -1401,7 +1489,7 @@ msgid "IPv4 only"
 msgstr "Somente IPv4"
 
 msgid "IPv4 prefix"
-msgstr ""
+msgstr "Prefixo IPv4"
 
 msgid "IPv4 prefix length"
 msgstr "Tamanho do prefixo IPv4"
@@ -1410,7 +1498,7 @@ msgid "IPv4-Address"
 msgstr "Endereço IPv4"
 
 msgid "IPv4-in-IPv4 (RFC2003)"
-msgstr ""
+msgstr "IPv4-in-IPv4 (RFC2003)"
 
 msgid "IPv6"
 msgstr "IPv6"
@@ -1419,13 +1507,15 @@ msgid "IPv6 Firewall"
 msgstr "Firewall para IPv6"
 
 msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "Vizinhos IPv6"
 
 msgid "IPv6 Settings"
-msgstr ""
+msgstr "Configurações IPv6"
 
 msgid "IPv6 ULA-Prefix"
 msgstr ""
+"Prefixo <abbr title=\"Unique Local Address/Endereço Local Único\">ULA</abbr> "
+"IPv6"
 
 msgid "IPv6 WAN Status"
 msgstr "Estado IPv6 da WAN"
@@ -1434,13 +1524,13 @@ msgid "IPv6 address"
 msgstr "Endereço IPv6"
 
 msgid "IPv6 address delegated to the local tunnel endpoint (optional)"
-msgstr ""
+msgstr "Endereços IPv6 delegados para o ponta local do túnel (opcional)"
 
 msgid "IPv6 assignment hint"
-msgstr ""
+msgstr "Sugestão de atribuição IPv6"
 
 msgid "IPv6 assignment length"
-msgstr ""
+msgstr "Tamanho da atribuição IPv6"
 
 msgid "IPv6 gateway"
 msgstr "Roteador padrão do IPv6"
@@ -1455,11 +1545,17 @@ msgid "IPv6 prefix length"
 msgstr "Tamanho Prefixo IPv6"
 
 msgid "IPv6 routed prefix"
+msgstr "Prefixo roteável IPv6"
+
+msgid "IPv6 suffix"
 msgstr ""
 
 msgid "IPv6-Address"
 msgstr "Endereço IPv6"
 
+msgid "IPv6-PD"
+msgstr "IPv6-PD"
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
 
@@ -1472,11 +1568,11 @@ msgstr "IPv6-sobre-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identidade PEAP"
 
-msgid "If checked, 1DES is enaled"
-msgstr ""
+msgid "If checked, 1DES is enabled"
+msgstr "Se marcado, a cifragem 1DES será habilitada"
 
 msgid "If checked, encryption is disabled"
-msgstr ""
+msgstr "Se marcado, a cifragem estará desabilitada"
 
 msgid ""
 "If specified, mount the device by its UUID instead of a fixed device node"
@@ -1532,6 +1628,8 @@ 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 ""
+"Para prevenir acesso não autorizado neste sistema, sua requisição foi "
+"bloqueada. Clique abaixo em \"Continuar »\" para retornar à página anterior."
 
 msgid "Inactivity timeout"
 msgstr "Tempo limite de inatividade"
@@ -1552,7 +1650,7 @@ msgid "Install"
 msgstr "Instalar"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
-msgstr ""
+msgstr "Instale iputils-traceroute6 para rastrear rotas IPv6"
 
 msgid "Install package %q"
 msgstr "Instalar pacote %q"
@@ -1566,6 +1664,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"
 
@@ -1579,7 +1680,7 @@ msgid "Interface is shutting down..."
 msgstr "A interface está desligando..."
 
 msgid "Interface name"
-msgstr ""
+msgstr "Nome da Interface"
 
 msgid "Interface not present or not connected yet."
 msgstr "A interface não está presente ou não está conectada ainda."
@@ -1594,7 +1695,7 @@ msgid "Interfaces"
 msgstr "Interfaces"
 
 msgid "Internal"
-msgstr ""
+msgstr "Interno"
 
 msgid "Internal Server Error"
 msgstr "erro no servidor interno"
@@ -1615,7 +1716,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Usuário e/ou senha inválida! Por favor, tente novamente."
 
-#, fuzzy
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
@@ -1623,8 +1726,8 @@ msgstr ""
 "A imagem que está a tentar carregar aparenta nao caber na flash do "
 "equipamento. Por favor verifique o arquivo da imagem!"
 
-msgid "Java Script required!"
-msgstr "É necessário Java Script!"
+msgid "JavaScript required!"
+msgstr "É necessário JavaScript!"
 
 msgid "Join Network"
 msgstr "Conectar à Rede"
@@ -1633,7 +1736,7 @@ msgid "Join Network: Wireless Scan"
 msgstr "Conectar à Rede: Busca por Rede Sem Fio"
 
 msgid "Joining Network: %q"
-msgstr ""
+msgstr "Juntando-se à rede %q"
 
 msgid "Keep settings"
 msgstr "Manter configurações"
@@ -1678,13 +1781,13 @@ msgid "Language and Style"
 msgstr "Idioma e Estilo"
 
 msgid "Latency"
-msgstr ""
+msgstr "Latência"
 
 msgid "Leaf"
-msgstr ""
+msgstr "Folha"
 
 msgid "Lease time"
-msgstr ""
+msgstr "Tempo de concessão"
 
 msgid "Lease validity time"
 msgstr "Tempo de validade da atribuição"
@@ -1692,9 +1795,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"
 
@@ -1712,21 +1812,23 @@ msgstr "Limite"
 
 msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
 msgstr ""
+"Limite o serviço DNS para subredes das interfaces nas quais estamos servindo "
+"DNS."
 
 msgid "Limit listening to these interfaces, and loopback."
-msgstr ""
+msgstr "Escute somente nestas interfaces e na interface local (loopback) "
 
 msgid "Line Attenuation (LATN)"
-msgstr ""
+msgstr "Atenuação de Linha (<abbr title=\"Line Attenuation\">LATN</abbr>)"
 
 msgid "Line Mode"
-msgstr ""
+msgstr "Modo da Linha"
 
 msgid "Line State"
-msgstr ""
+msgstr "Estado da Linha"
 
 msgid "Line Uptime"
-msgstr ""
+msgstr "Tempo de Atividade da Linha"
 
 msgid "Link On"
 msgstr "Enlace Ativo"
@@ -1738,8 +1840,34 @@ msgstr ""
 "Lista dos servidores <abbr title=\"Domain Name System\">DNS</abbr> para "
 "encaminhar as requisições"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+"Lista dos R0KHs no mesmo Domínio de Mobilidade. <br /> Formato: Endereço "
+"MAC, Identificador NAS, chave de 128 bits como cadeia hexadecimal. <br /> "
+"Esta lista é usada para mapear o Identificador R0KH (Identificador NAS) para "
+"um endereço MAC de destino ao solicitar a chave PMK-R1 a partir do R0KH que "
+"o STA usado durante a Associação de Domínio de Mobilidade Inicial."
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+"Lista dos R1KHs no mesmo Domínio de Mobilidade. <br /> Formato: Endereço "
+"MAC, R1KH-ID como 6 octetos com dois pontos, chave de 128 bits como cadeia "
+"hexadecimal. <br /> Esta lista é usada para mapear o identificador R1KH para "
+"um endereço MAC de destino ao enviar a chave PMK-R1 a partir do R0KH. Esta é "
+"também a lista de R1KHs autorizados no MD que podem solicitar chaves PMK-R1."
+
 msgid "List of SSH key files for auth"
-msgstr ""
+msgstr "Lista de arquivos de chaves SSH para autenticação"
 
 msgid "List of domains to allow RFC1918 responses for"
 msgstr ""
@@ -1752,10 +1880,10 @@ msgstr ""
 "fornecem resultados errados para consultas a domínios inexistentes (NX)"
 
 msgid "Listen Interfaces"
-msgstr ""
+msgstr "Interfaces de Escuta"
 
 msgid "Listen Port"
-msgstr ""
+msgstr "Porta de Escuta"
 
 msgid "Listen only on the given interface or, if unspecified, on all"
 msgstr ""
@@ -1774,7 +1902,7 @@ msgid "Loading"
 msgstr "Carregando"
 
 msgid "Local IP address to assign"
-msgstr ""
+msgstr "Endereço IP local para atribuir"
 
 msgid "Local IPv4 address"
 msgstr "Endereço IPv4 local"
@@ -1783,7 +1911,7 @@ msgid "Local IPv6 address"
 msgstr "Endereço IPv6 local"
 
 msgid "Local Service Only"
-msgstr ""
+msgstr "Somente Serviço Local"
 
 msgid "Local Startup"
 msgstr "Iniciação Local"
@@ -1794,7 +1922,6 @@ msgstr "Hora Local"
 msgid "Local domain"
 msgstr "Domínio Local"
 
-#, fuzzy
 msgid ""
 "Local domain specification. Names matching this domain are never forwarded "
 "and are resolved from DHCP or hosts files only"
@@ -1822,7 +1949,7 @@ msgid "Localise queries"
 msgstr "Localizar consultas"
 
 msgid "Locked to channel %s used by: %s"
-msgstr ""
+msgstr "Travado no canal %s usado por: %s"
 
 msgid "Log output level"
 msgstr "Nível de detalhamento de saída dos registros"
@@ -1841,6 +1968,8 @@ msgstr "Sair"
 
 msgid "Loss of Signal Seconds (LOSS)"
 msgstr ""
+"Segundos de Perda de Sinal (<abbr title=\"Loss of Signal Seconds\">LOSS</"
+"abbr>)"
 
 msgid "Lowest leased address as offset from the network address."
 msgstr "O endereço mais baixo concedido como deslocamento do endereço da rede."
@@ -1858,13 +1987,13 @@ msgid "MAC-List"
 msgstr "Lista de MAC"
 
 msgid "MAP / LW4over6"
-msgstr ""
+msgstr "MAP / LW4over6"
 
 msgid "MB/s"
 msgstr "MB/s"
 
 msgid "MD5"
-msgstr ""
+msgstr "MD5"
 
 msgid "MHz"
 msgstr "MHz"
@@ -1878,15 +2007,16 @@ msgid ""
 "Make sure to clone the root filesystem using something like the commands "
 "below:"
 msgstr ""
+"Certifique-se que clonou o sistema de arquivos raiz com algo como o comando "
+"abaixo:"
 
 msgid "Manual"
-msgstr ""
+msgstr "Manual"
 
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
-
-msgid "Maximum Rate"
-msgstr "Taxa Máxima"
+"Taxa de Dados Atingível Máxima (<abbr title=\"Maximum Attainable Data Rate"
+"\">ATTNDR</abbr>)"
 
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Número máximo permitido de alocações DHCP ativas"
@@ -1908,6 +2038,8 @@ msgid ""
 "Maximum length of the name is 15 characters including the automatic protocol/"
 "bridge prefix (br-, 6in4-, pppoe- etc.)"
 msgstr ""
+"Comprimento máximo do nome é de 15 caracteres, incluindo o prefixo "
+"automático do protocolo/ponte (br-, 6in4- pppoe-, etc.)"
 
 msgid "Maximum number of leased addresses."
 msgstr "Número máximo de endereços atribuídos."
@@ -1924,26 +2056,26 @@ msgstr "Uso da memória (%)"
 msgid "Metric"
 msgstr "Métrica"
 
-msgid "Minimum Rate"
-msgstr "Taxa Mínima"
-
 msgid "Minimum hold time"
 msgstr "Tempo mínimo de espera"
 
 msgid "Mirror monitor port"
-msgstr ""
+msgstr "Porta de monitoramento do espelho"
 
 msgid "Mirror source port"
-msgstr ""
+msgstr "Porta de origem do espelho"
 
 msgid "Missing protocol extension for proto %q"
 msgstr "Extensão para o protocolo %q está ausente"
 
+msgid "Mobility Domain"
+msgstr "Domínio da Mobilidade"
+
 msgid "Mode"
 msgstr "Modo"
 
 msgid "Model"
-msgstr ""
+msgstr "Modelo"
 
 msgid "Modem device"
 msgstr "Dispositivo do Modem"
@@ -1977,7 +2109,7 @@ msgstr ""
 "anexado ao sistema de arquivos"
 
 msgid "Mount filesystems not specifically configured"
-msgstr ""
+msgstr "Monte sistemas de arquivos não especificamente configurados"
 
 msgid "Mount options"
 msgstr "Opções de montagem"
@@ -1986,7 +2118,7 @@ msgid "Mount point"
 msgstr "Ponto de montagem"
 
 msgid "Mount swap not specifically configured"
-msgstr ""
+msgstr "Montar espalho de troca (swap) não especificamente configurado"
 
 msgid "Mounted file systems"
 msgstr "Sistemas de arquivos montados"
@@ -1997,9 +2129,6 @@ msgstr "Mover para baixo"
 msgid "Move up"
 msgstr "Mover para cima"
 
-msgid "Multicast Rate"
-msgstr "Taxa de Multicast"
-
 msgid "Multicast address"
 msgstr "Endereço de Multicast"
 
@@ -2007,22 +2136,25 @@ msgid "NAS ID"
 msgstr "NAS ID"
 
 msgid "NAT-T Mode"
-msgstr ""
+msgstr "Modo NAT-T"
 
 msgid "NAT64 Prefix"
+msgstr "Prefixo NAT64"
+
+msgid "NCM"
 msgstr ""
 
 msgid "NDP-Proxy"
-msgstr ""
+msgstr "Proxy NDP"
 
 msgid "NT Domain"
-msgstr ""
+msgstr "Domínio NT"
 
 msgid "NTP server candidates"
 msgstr "Candidatos a servidor NTP"
 
 msgid "NTP sync time-out"
-msgstr ""
+msgstr "Tempo limite da sincronia do NTP"
 
 msgid "Name"
 msgstr "Nome"
@@ -2058,7 +2190,7 @@ msgid "No DHCP Server configured for this interface"
 msgstr "Nenhum Servidor DHCP configurado para esta interface"
 
 msgid "No NAT-T"
-msgstr ""
+msgstr "Sem NAT-T"
 
 msgid "No chains in this table"
 msgstr "Nenhuma cadeira nesta tabela"
@@ -2094,16 +2226,18 @@ msgid "Noise"
 msgstr "Ruído"
 
 msgid "Noise Margin (SNR)"
-msgstr ""
+msgstr "Margem de Ruído (<abbr title=\"Noise Margin\">SNR</abbr>)"
 
 msgid "Noise:"
 msgstr "Ruído:"
 
 msgid "Non Pre-emtive CRC errors (CRC_P)"
 msgstr ""
+"Erros CRC Não Preemptivos<abbr title=\"Non Pre-emptive CRC errors\">CRC_P</"
+"abbr>"
 
 msgid "Non-wildcard"
-msgstr ""
+msgstr "Sem caracter curinga"
 
 msgid "None"
 msgstr "Nenhum"
@@ -2124,7 +2258,7 @@ msgid "Note: Configuration files will be erased."
 msgstr "Nota: Os arquivos de configuração serão apagados."
 
 msgid "Note: interface name length"
-msgstr ""
+msgstr "Aviso: tamanho do nome da interface"
 
 msgid "Notice"
 msgstr "Aviso"
@@ -2139,10 +2273,10 @@ msgid "OPKG-Configuration"
 msgstr "Configuração-OPKG"
 
 msgid "Obfuscated Group Password"
-msgstr ""
+msgstr "Senha Ofuscada do Grupo"
 
 msgid "Obfuscated Password"
-msgstr ""
+msgstr "Senha Ofuscada"
 
 msgid "Off-State Delay"
 msgstr "Atraso no estado de desligado"
@@ -2173,7 +2307,7 @@ msgid "One or more fields contain invalid values!"
 msgstr "Um ou mais campos contém valores inválidos!"
 
 msgid "One or more invalid/required values on tab"
-msgstr ""
+msgstr "Um ou mais valores inválidos/obrigatórios na aba"
 
 msgid "One or more required fields have no value!"
 msgstr "Um ou mais campos obrigatórios não tem valor!"
@@ -2182,10 +2316,10 @@ msgid "Open list..."
 msgstr "Abrir lista..."
 
 msgid "OpenConnect (CISCO AnyConnect)"
-msgstr ""
+msgstr "OpenConnect (CISCO AnyConnect)"
 
 msgid "Operating frequency"
-msgstr ""
+msgstr "Frequência de Operação"
 
 msgid "Option changed"
 msgstr "Opção alterada"
@@ -2193,41 +2327,61 @@ msgstr "Opção alterada"
 msgid "Option removed"
 msgstr "Opção removida"
 
+msgid "Optional"
+msgstr "Opcional"
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
+"Opcional, especifique para sobrescrever o servidor padrão (tic.sixxs.net)"
 
 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. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
+"Opcional. Adiciona uma camada extra de cifragem simétrica para resistência "
+"pós quântica."
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
-msgstr ""
+msgstr "Opcional. Cria rotas para endereços IP Autorizados para este parceiro."
 
 msgid ""
 "Optional. Host of peer. Names are resolved prior to bringing up the "
 "interface."
 msgstr ""
+"Opcional. Equipamento do parceiro. Nomes serão resolvido antes de levantar a "
+"interface."
 
 msgid "Optional. Maximum Transmission Unit of tunnel interface."
-msgstr ""
+msgstr "Opcional. Unidade Máxima de Transmissão da interface do túnel."
 
 msgid "Optional. Port of peer."
-msgstr ""
+msgstr "Opcional. Porta do parceiro."
 
 msgid ""
 "Optional. Seconds between keep alive messages. Default is 0 (disabled). "
 "Recommended value if this device is behind a NAT is 25."
 msgstr ""
+"Opcional. Segundos entre mensagens para manutenção da conexão. O padrão é 0 "
+"(desabilitado). O valor recomendado caso este dispositivo esteja atrás de "
+"uma NAT é 25."
 
 msgid "Optional. UDP port used for outgoing and incoming packets."
-msgstr ""
+msgstr "opcional. Porta UDP usada para pacotes saintes ou entrantes."
 
 msgid "Options"
 msgstr "Opções"
@@ -2241,26 +2395,25 @@ msgstr "Saída"
 msgid "Outbound:"
 msgstr "Saindo:"
 
-msgid "Outdoor Channels"
-msgstr "Canais para externo"
-
 msgid "Output Interface"
-msgstr ""
+msgstr "Interface de Saída"
 
 msgid "Override MAC address"
 msgstr "Sobrescrever o endereço MAC"
 
 msgid "Override MTU"
-msgstr "Sobrescrever o MTU"
+msgstr ""
+"Sobrescrever o <abbr title=\"Maximum Transmission Unit/Unidade Máxima de "
+"Transmissão\">MTU</abbr>"
 
 msgid "Override TOS"
-msgstr ""
+msgstr "Sobrescrever o TOS"
 
 msgid "Override TTL"
-msgstr ""
+msgstr "Sobrescrever o TTL"
 
 msgid "Override default interface name"
-msgstr ""
+msgstr "Sobrescrever o nome da nova interface"
 
 msgid "Override the gateway in DHCP responses"
 msgstr "Sobrescrever o roteador padrão nas respostas do DHCP"
@@ -2294,6 +2447,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr "PMK R1 Push"
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2307,19 +2463,19 @@ msgid "PPPoE"
 msgstr "PPPoE"
 
 msgid "PPPoSSH"
-msgstr ""
+msgstr "PPPoSSH"
 
 msgid "PPtP"
 msgstr "PPtP"
 
 msgid "PSID offset"
-msgstr ""
+msgstr "Deslocamento PSID"
 
 msgid "PSID-bits length"
-msgstr ""
+msgstr "Comprimento dos bits PSID"
 
 msgid "PTM/EFM (Packet Transfer Mode)"
-msgstr ""
+msgstr "PTM/EFM (Modo de Transferência de Pacotes)"
 
 msgid "Package libiwinfo required!"
 msgstr "O pacote libiwinfo é necessário!"
@@ -2346,11 +2502,14 @@ msgid "Password of Private Key"
 msgstr "Senha da Chave Privada"
 
 msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Senha da Chave Privada interna"
 
 msgid "Password successfully changed!"
 msgstr "A senha foi alterada com sucesso!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Caminho para o Certificado da AC"
 
@@ -2364,25 +2523,25 @@ msgid "Path to executable which handles the button event"
 msgstr "Caminho para o executável que trata o evento do botão"
 
 msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "Caminho para os certificados CA interno"
 
 msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "Caminho para o Certificado do Cliente interno"
 
 msgid "Path to inner Private Key"
-msgstr ""
+msgstr "Caminho para a Chave Privada interna"
 
 msgid "Peak:"
 msgstr "Pico:"
 
 msgid "Peer IP address to assign"
-msgstr ""
+msgstr "Endereço IP do parceiro para atribuir"
 
 msgid "Peers"
-msgstr ""
+msgstr "Parceiros"
 
 msgid "Perfect Forward Secrecy"
-msgstr ""
+msgstr "Sigilo Encaminhado Perfeito"
 
 msgid "Perform reboot"
 msgstr "Reiniciar o sistema"
@@ -2391,7 +2550,7 @@ msgid "Perform reset"
 msgstr "Zerar configuração"
 
 msgid "Persistent Keep Alive"
-msgstr ""
+msgstr "Manutenção da Conexão Persistente"
 
 msgid "Phy Rate:"
 msgstr "Taxa física:"
@@ -2418,14 +2577,24 @@ msgid "Port status:"
 msgstr "Status da porta"
 
 msgid "Power Management Mode"
-msgstr ""
+msgstr "Modo de Gerenciamento de Energia"
 
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
+"Erros CRC Preemptivos<abbr title=\"Pre-emptive CRC errors\">CRCP_P</abbr>"
 
-msgid "Preshared Key"
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
 msgstr ""
 
+msgid "Prefix Delegated"
+msgstr "Prefixo Delegado"
+
+msgid "Preshared Key"
+msgstr "Chave Compartilhada"
+
 msgid ""
 "Presume peer to be dead after given amount of LCP echo failures, use 0 to "
 "ignore failures"
@@ -2434,7 +2603,7 @@ msgstr ""
 "echo do LCP. Use 0 para ignorar as falhas"
 
 msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Evite escutar nestas Interfaces."
 
 msgid "Prevents client-to-client communication"
 msgstr "Impede a comunicação de cliente para cliente"
@@ -2443,7 +2612,7 @@ msgid "Prism2/2.5/3 802.11b Wireless Controller"
 msgstr "Prism2/2.5/3 802.11b Wireless Controlador"
 
 msgid "Private Key"
-msgstr ""
+msgstr "Chave Privada"
 
 msgid "Proceed"
 msgstr "Proceder"
@@ -2452,7 +2621,7 @@ msgid "Processes"
 msgstr "Processos"
 
 msgid "Profile"
-msgstr ""
+msgstr "Perfil"
 
 msgid "Prot."
 msgstr "Protocolo"
@@ -2479,19 +2648,27 @@ msgid "Pseudo Ad-Hoc (ahdemo)"
 msgstr "Ad-Hoc falso (ahdemo)"
 
 msgid "Public Key"
-msgstr ""
+msgstr "Chave Pública"
 
 msgid "Public prefix routed to this device for distribution to clients."
 msgstr ""
+"Prefixo público roteado para este dispositivo para distribuição a seus "
+"clientes."
 
 msgid "QMI Cellular"
-msgstr ""
+msgstr "Celular QMI"
 
 msgid "Quality"
 msgstr "Qualidade"
 
+msgid "R0 Key Lifetime"
+msgstr "Validade da Chave R0"
+
+msgid "R1 Key Holder"
+msgstr "Detentor da Chave R1"
+
 msgid "RFC3947 NAT-T mode"
-msgstr ""
+msgstr "Modo NAT-T (RFC3947)"
 
 msgid "RTS/CTS Threshold"
 msgstr "Limiar RTS/CTS"
@@ -2550,7 +2727,6 @@ msgstr ""
 msgid "Really reset all changes?"
 msgstr "Realmente limpar todas as mudanças?"
 
-#, fuzzy
 msgid ""
 "Really shut down network?\\nYou might lose access to this device if you are "
 "connected via this interface."
@@ -2585,6 +2761,9 @@ msgstr "Tráfego em Tempo Real"
 msgid "Realtime Wireless"
 msgstr "Rede sem fio em Tempo Real"
 
+msgid "Reassociation Deadline"
+msgstr "Limite para Reassociação"
+
 msgid "Rebind protection"
 msgstr "Proteção contra \"Rebind\""
 
@@ -2604,7 +2783,7 @@ msgid "Receiver Antenna"
 msgstr "Antena de Recepção"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
-msgstr ""
+msgstr "Recomendado. Endereços IP da interface do WireGuard."
 
 msgid "Reconnect this interface"
 msgstr "Reconectar esta interface"
@@ -2615,9 +2794,6 @@ msgstr "Reconectando interface"
 msgid "References"
 msgstr "Referências"
 
-msgid "Regulatory Domain"
-msgstr "Domínio Regulatório"
-
 msgid "Relay"
 msgstr "Retransmissor"
 
@@ -2634,7 +2810,7 @@ msgid "Remote IPv4 address"
 msgstr "Endereço IPv4 remoto"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr ""
+msgstr "Endereço IPv4 remoto ou FQDN"
 
 msgid "Remove"
 msgstr "Remover"
@@ -2649,33 +2825,47 @@ msgid "Replace wireless configuration"
 msgstr "Substituir a configuração da rede sem fio"
 
 msgid "Request IPv6-address"
-msgstr ""
+msgstr "Solicita endereço IPv6"
 
 msgid "Request IPv6-prefix of length"
-msgstr ""
+msgstr "Solicita prefixo IPv6 de tamanho"
 
 msgid "Require TLS"
-msgstr ""
+msgstr "Requer TLS"
+
+msgid "Required"
+msgstr "Necessário"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
-msgstr "Requerido para alguns provedores de internet, ex. Charter com DOCSIS 3"
+msgstr ""
+"Obrigatório para alguns provedores de internet, ex. Charter com DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
-msgstr ""
+msgstr "Obrigatório. Chave privada codificada em Base64 para esta interface."
+
+msgid "Required. Base64-encoded public key of peer."
+msgstr "Necessário. Chave Pública do parceiro codificada como Base64."
 
 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 ""
+"Obrigatório. Endereços IP e prefixos que este parceiro está autorizado a "
+"usar dentro do túnel. Normalmente é o endereço IP do parceiro no túnel e as "
+"redes que o parceiro roteia através do túnel."
 
-msgid "Required. Public key of peer."
-msgstr ""
+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 "Obrigatório. Chave Pública do parceiro."
 
 msgid ""
 "Requires upstream supports DNSSEC; verify unsigned domain responses really "
 "come from unsigned domains"
 msgstr ""
+"Exige o suporte DNSSEC do servidor superior; verifica se resposta não "
+"assinadas realmente vẽm de domínios não assinados."
 
 msgid "Reset"
 msgstr "Limpar"
@@ -2714,19 +2904,19 @@ msgid "Root directory for files served via TFTP"
 msgstr "Diretório raiz para arquivos disponibilizados pelo TFTP"
 
 msgid "Root preparation"
-msgstr ""
+msgstr "Prepação da raiz (/)"
 
 msgid "Route Allowed IPs"
-msgstr ""
+msgstr "Roteie Andereços IP Autorizados"
 
 msgid "Route type"
-msgstr ""
+msgstr "Tipo de rota"
 
 msgid "Routed IPv6 prefix for downstream interfaces"
-msgstr ""
+msgstr "Prefixo roteável IPv6 para interfaces internas"
 
 msgid "Router Advertisement-Service"
-msgstr ""
+msgstr "Serviço de Anúncio de Roteador"
 
 msgid "Router Password"
 msgstr "Senha do Roteador"
@@ -2749,30 +2939,32 @@ msgid "Run filesystem check"
 msgstr "Execute a verificação do sistema de arquivos "
 
 msgid "SHA256"
-msgstr ""
+msgstr "SHA256"
 
 msgid ""
 "SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) "
 "use 6in4 instead"
 msgstr ""
+"O SIXXS suporta somente TIC. Use o 6in4 para túneis estáticos usando o "
+"protocolo IP 41 (RFC4213)"
 
 msgid "SIXXS-handle[/Tunnel-ID]"
-msgstr ""
+msgstr "Identificador do SIXXS[/Identificador do Túnel]"
 
 msgid "SNR"
-msgstr ""
+msgstr "SNR"
 
 msgid "SSH Access"
 msgstr "Acesso SSH"
 
 msgid "SSH server address"
-msgstr ""
+msgstr "Endereço do servidor SSH"
 
 msgid "SSH server port"
-msgstr ""
+msgstr "Porta do servidor SSH"
 
 msgid "SSH username"
-msgstr ""
+msgstr "Usuário do SSH"
 
 msgid "SSH-Keys"
 msgstr "Chaves SSH"
@@ -2814,22 +3006,21 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Isolar Clientes"
 
-msgid "Separate WDS"
-msgstr "Separar WDS"
-
 msgid "Server Settings"
 msgstr "Configurações do Servidor"
 
 msgid "Server password"
-msgstr ""
+msgstr "Senha do servidor"
 
 msgid ""
 "Server password, enter the specific password of the tunnel when the username "
 "contains the tunnel ID"
 msgstr ""
+"Senha do servidor. Informe a senha para este túnel quando o nome do usuário "
+"contiver o identificador do túnel"
 
 msgid "Server username"
-msgstr ""
+msgstr "Usuário do servidor"
 
 msgid "Service Name"
 msgstr "Nome do Serviço"
@@ -2840,7 +3031,11 @@ msgstr "Tipo do Serviço"
 msgid "Services"
 msgstr "Serviços"
 
-#, fuzzy
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr "Configurar a Sincronização do Horário"
 
@@ -2849,9 +3044,11 @@ msgstr "Configurar Servidor DHCP"
 
 msgid "Severely Errored Seconds (SES)"
 msgstr ""
+"Segundos com erro severos (<abbr title=\"Severely Errored Seconds\">SES</"
+"abbr>)"
 
 msgid "Short GI"
-msgstr ""
+msgstr "Intervalo de guarda curto"
 
 msgid "Show current backup file list"
 msgstr "Mostra a lista atual de arquivos para a cópia de segurança"
@@ -2866,7 +3063,7 @@ msgid "Signal"
 msgstr "Sinal"
 
 msgid "Signal Attenuation (SATN)"
-msgstr ""
+msgstr "Atenuação do Sinal (<abbr title=\"Signal Attenuation\">SATN</abbr>)"
 
 msgid "Signal:"
 msgstr "Sinal:"
@@ -2875,7 +3072,7 @@ msgid "Size"
 msgstr "Tamanho"
 
 msgid "Size (.ipk)"
-msgstr ""
+msgstr "Tamanho (.ipk)"
 
 msgid "Skip"
 msgstr "Pular"
@@ -2893,7 +3090,7 @@ msgid "Software"
 msgstr "Software"
 
 msgid "Software VLAN"
-msgstr ""
+msgstr "VLAN em Software"
 
 msgid "Some fields are invalid, cannot save values!"
 msgstr "Alguns campos estão inválidos e os valores não podem ser salvos!"
@@ -2920,7 +3117,7 @@ msgid "Source"
 msgstr "Origem"
 
 msgid "Source routing"
-msgstr ""
+msgstr "Roteamento pela origem"
 
 msgid "Specifies the button state to handle"
 msgstr "Especifica o estado do botão para ser tratado"
@@ -2946,17 +3143,21 @@ msgstr ""
 "equipamento está morto"
 
 msgid "Specify a TOS (Type of Service)."
-msgstr ""
+msgstr "Especifique um Tipo de Serviço (TOS)"
 
 msgid ""
 "Specify a TTL (Time to Live) for the encapsulating packet other than the "
 "default (64)."
 msgstr ""
+"Especifica o tempo de vida (<abbr title=\"Time to Live\">TTL</abbr>) para os "
+"pacotes encapsulados ao invés do padrão (64)."
 
 msgid ""
 "Specify an MTU (Maximum Transmission Unit) other than the default (1280 "
 "bytes)."
 msgstr ""
+"Especifica a unidade máxima de transmissão (<abbr title=\"Maximum "
+"Transmission Unit\">MTU</abbr>) ao invés do valor padrão (1280 bytes)"
 
 msgid "Specify the secret encryption key here."
 msgstr "Especifique a chave de cifragem secreta aqui."
@@ -2982,9 +3183,6 @@ msgstr "Alocações Estáticas"
 msgid "Static Routes"
 msgstr "Rotas Estáticas"
 
-msgid "Static WDS"
-msgstr "WDS Estático"
-
 msgid "Static address"
 msgstr "Endereço Estático"
 
@@ -3011,13 +3209,13 @@ msgid "Submit"
 msgstr "Enviar"
 
 msgid "Suppress logging"
-msgstr ""
+msgstr "Suprimir registros (log)"
 
 msgid "Suppress logging of the routine operation of these protocols"
-msgstr ""
+msgstr "Suprimir registros (log) de operações rotineiras destes protocolos"
 
 msgid "Swap"
-msgstr ""
+msgstr "Espaço de Troca (swap)"
 
 msgid "Swap Entry"
 msgstr "Entrada do espaço de troca (Swap)"
@@ -3034,9 +3232,11 @@ msgstr "Switch %q (%s)"
 msgid ""
 "Switch %q has an unknown topology - the VLAN settings might not be accurate."
 msgstr ""
+"O Switch %q tem uma topologia desconhecida - as configurações de VLAN podem "
+"não ser precisas."
 
 msgid "Switch VLAN"
-msgstr ""
+msgstr "Switch VLAN"
 
 msgid "Switch protocol"
 msgstr "Trocar o protocolo"
@@ -3081,12 +3281,11 @@ msgid "Target"
 msgstr "Destino"
 
 msgid "Target network"
-msgstr ""
+msgstr "Rede de destino"
 
 msgid "Terminate"
 msgstr "Terminar"
 
-#, fuzzy
 msgid ""
 "The <em>Device Configuration</em> section covers physical settings of the "
 "radio hardware such as channel, transmit power or antenna selection which "
@@ -3112,10 +3311,12 @@ msgid ""
 "The HE.net endpoint update configuration changed, you must now use the plain "
 "username instead of the user ID!"
 msgstr ""
+"A configuração da atualização de pontas HE.net mudou. Você deve agora usar o "
+"nome do usuário ao invés do identificador do usuário!"
 
 msgid ""
 "The IPv4 address or the fully-qualified domain name of the remote tunnel end."
-msgstr ""
+msgstr "O endereço IPv4 ou o nome completo (FQDN) da ponta remota do túnel."
 
 msgid ""
 "The IPv6 prefix assigned to the provider, usually ends with <code>::</code>"
@@ -3131,13 +3332,14 @@ msgstr ""
 
 msgid "The configuration file could not be loaded due to the following error:"
 msgstr ""
+"O arquivo de configuração não pode ser carregado devido ao seguinte erro:"
 
 msgid ""
 "The device file of the memory or partition (<abbr title=\"for example\">e.g."
 "</abbr> <code>/dev/sda1</code>)"
 msgstr ""
-"O arquivo do dispositivo de armazenamento ou da partição (<abbr title=\"por "
-"exemplo\">ex.</abbr> <code>/dev/sda1</code>)"
+"O arquivo do dispositivo de armazenamento ou da partição (ex: <code>/dev/"
+"sda1</code>)"
 
 msgid ""
 "The filesystem that was used to format the memory (<abbr title=\"for example"
@@ -3170,7 +3372,6 @@ msgstr "As seguintes regras estão atualmente ativas neste sistema."
 msgid "The given network name is not unique"
 msgstr "O nome de rede informado não é único"
 
-#, fuzzy
 msgid ""
 "The hardware is not multi-SSID capable and the existing configuration will "
 "be replaced if you proceed."
@@ -3188,7 +3389,7 @@ msgid "The length of the IPv6 prefix in bits"
 msgstr "O comprimento do prefixo IPv6 em bits"
 
 msgid "The local IPv4 address over which the tunnel is created (optional)."
-msgstr ""
+msgstr "O endereço IPv4 local sobre o qual o túnel será criado (opcional)."
 
 msgid ""
 "The network ports on this device can be combined to several <abbr title="
@@ -3210,7 +3411,7 @@ msgid "The selected protocol needs a device assigned"
 msgstr "O protocolo selecionado necessita estar associado a um dispositivo"
 
 msgid "The submitted security token is invalid or already expired!"
-msgstr ""
+msgstr "A chave eletrônica enviada é inválida ou já expirou!"
 
 msgid ""
 "The system is erasing the configuration partition now and will reboot itself "
@@ -3219,7 +3420,6 @@ msgstr ""
 "O sistema está apagando agora a partição da configuração e irá reiniciar "
 "quando terminado."
 
-#, fuzzy
 msgid ""
 "The system is flashing now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
 "few minutes before you try to reconnect. It might be necessary to renew the "
@@ -3235,6 +3435,8 @@ msgid ""
 "The tunnel end-point is behind NAT, defaults to disabled and only applies to "
 "AYIYA"
 msgstr ""
+"O final do túnel está atrás de um NAT. Por padrão será desabilitado e "
+"somente se aplica a AYIYA"
 
 msgid ""
 "The uploaded image file does not contain a supported format. Make sure that "
@@ -3277,6 +3479,9 @@ msgid ""
 "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
 "Name System\">DNS</abbr> servers."
 msgstr ""
+"Este arquivo deve conter linhas como 'server=/domain/1.2.3.4' ou "
+"'server=1.2.3.4' para servidores <abbr title=\"Domain Name System/Sistema de "
+"Nomes de Domínios\">DNS</abbr> por domínio ou completos."
 
 msgid ""
 "This is a list of shell glob patterns for matching files and directories to "
@@ -3292,6 +3497,8 @@ msgid ""
 "This is either the \"Update Key\" configured for the tunnel or the account "
 "password if no update key has been configured"
 msgstr ""
+"Isto é a \"Update Key\" configurada para o túnel ou a senha da cpnta se não "
+"tem uma \"Update Keu\" configurada"
 
 msgid ""
 "This is the content of /etc/rc.local. Insert your own commands here (in "
@@ -3315,11 +3522,13 @@ msgstr ""
 "\">DHCP</abbr> na rede local"
 
 msgid "This is the plain username for logging into the account"
-msgstr ""
+msgstr "Este é o nome do usuário em para se autenticar na sua conta"
 
 msgid ""
 "This is the prefix routed to you by the tunnel broker for use by clients"
 msgstr ""
+"Este é o prefixo roteado pelo agente do tunel para você usar com seus "
+"clientes"
 
 msgid "This is the system crontab in which scheduled tasks can be defined."
 msgstr "Este é o sistema de agendamento de tarefas."
@@ -3363,7 +3572,7 @@ msgstr ""
 "de segurança anterior."
 
 msgid "Tone"
-msgstr ""
+msgstr "Tom"
 
 msgid "Total Available"
 msgstr "Total Disponível"
@@ -3402,19 +3611,16 @@ msgid "Tunnel Interface"
 msgstr "Interface de Tunelamento"
 
 msgid "Tunnel Link"
-msgstr ""
+msgstr "Enlace do túnel"
 
 msgid "Tunnel broker protocol"
-msgstr ""
+msgstr "Protocolo do agente do túnel"
 
 msgid "Tunnel setup server"
-msgstr ""
+msgstr "Servidor de configuração do túnel"
 
 msgid "Tunnel type"
-msgstr ""
-
-msgid "Turbo Mode"
-msgstr "Modo Turbo"
+msgstr "Tipo de túnel"
 
 msgid "Tx-Power"
 msgstr "Potência de transmissão"
@@ -3435,7 +3641,7 @@ msgid "USB Device"
 msgstr "Dispositivo USB"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "Portas USB"
 
 msgid "UUID"
 msgstr "UUID"
@@ -3445,6 +3651,8 @@ msgstr "Não é possível a expedição"
 
 msgid "Unavailable Seconds (UAS)"
 msgstr ""
+"Segundos de indisponibilidade (<abbr title=\"Unavailable Seconds\">UAS</"
+"abbr>)"
 
 msgid "Unknown"
 msgstr "Desconhecido"
@@ -3456,7 +3664,7 @@ msgid "Unmanaged"
 msgstr "Não gerenciado"
 
 msgid "Unmount"
-msgstr ""
+msgstr "Desmontar"
 
 msgid "Unsaved Changes"
 msgstr "Alterações Não Salvas"
@@ -3498,22 +3706,24 @@ msgid "Use ISO/IEC 3166 alpha2 country codes."
 msgstr "Usar códigos de países ISO/IEC 3166 alpha2."
 
 msgid "Use MTU on tunnel interface"
-msgstr "Use MTU na interface do túnel"
+msgstr ""
+"Use o <abbr title=\"Maximum Transmission Unit/Unidade Máxima de Transmissão"
+"\">MTU</abbr> na interface do túnel"
 
 msgid "Use TTL on tunnel interface"
 msgstr "Use TTL na interface do túnel"
 
 msgid "Use as external overlay (/overlay)"
-msgstr ""
+msgstr "Use como uma sobreposição externa (/overlay)"
 
 msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "Usar como o sistema de arquivos raiz (/)"
 
 msgid "Use broadcast flag"
 msgstr "Use a marcação de broadcast"
 
 msgid "Use builtin IPv6-management"
-msgstr ""
+msgstr "Use o gerenciamento do IPv6 embarcado"
 
 msgid "Use custom DNS servers"
 msgstr "Use servidores DNS personalizados"
@@ -3546,11 +3756,18 @@ msgstr "Usado"
 msgid "Used Key Slot"
 msgstr "Posição da Chave Usada"
 
-msgid "User certificate (PEM encoded)"
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
 msgstr ""
+"Usado para dois diferentes propósitos: identificador do RADIUS NAS e do "
+"802.11r R0KH. Não necessário com o WPA(2)-PSK normal."
+
+msgid "User certificate (PEM encoded)"
+msgstr "Certificado do usuário (codificado em formato PEM)"
 
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "Chave do usuário (codificada em formato PEM)"
 
 msgid "Username"
 msgstr "Usuário"
@@ -3559,7 +3776,7 @@ msgid "VC-Mux"
 msgstr "VC-Mux"
 
 msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
 
 msgid "VLANs on %q"
 msgstr "VLANs em %q"
@@ -3568,34 +3785,34 @@ msgid "VLANs on %q (%s)"
 msgstr "VLANs em %q (%s)"
 
 msgid "VPN Local address"
-msgstr ""
+msgstr "Endereço Local da VPN"
 
 msgid "VPN Local port"
-msgstr ""
+msgstr "Porta Local da VPN"
 
 msgid "VPN Server"
 msgstr "Servidor VPN"
 
 msgid "VPN Server port"
-msgstr ""
+msgstr "Porta do Servidor VPN"
 
 msgid "VPN Server's certificate SHA1 hash"
-msgstr ""
+msgstr "Resumo digital SHA1 do certificado do servidor VPN"
 
 msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr ""
+msgstr "VPNC (VPN do CISCO 3000 (e outros))"
 
 msgid "Vendor"
-msgstr ""
+msgstr "Fabricante"
 
 msgid "Vendor Class to send when requesting DHCP"
 msgstr "Classe do fabricante para enviar quando requisitar o DHCP"
 
 msgid "Verbose"
-msgstr ""
+msgstr "Detalhado"
 
 msgid "Verbose logging by aiccu daemon"
-msgstr ""
+msgstr "Habilite registros detalhados do serviço AICCU"
 
 msgid "Verify"
 msgstr "Verificar"
@@ -3631,6 +3848,8 @@ msgstr ""
 msgid ""
 "Wait for NTP sync that many seconds, seting to 0 disables waiting (optional)"
 msgstr ""
+"Espere esta quantidade de segundos pela sincronia do NTP. Definindo como 0 "
+"desabilita a espera (opcional)"
 
 msgid "Waiting for changes to be applied..."
 msgstr "Esperando a aplicação das mudanças..."
@@ -3639,25 +3858,25 @@ msgid "Waiting for command to complete..."
 msgstr "Esperando o término do comando..."
 
 msgid "Waiting for device..."
-msgstr ""
+msgstr "Esperando pelo dispositivo..."
 
 msgid "Warning"
 msgstr "Atenção"
 
 msgid "Warning: There are unsaved changes that will get lost on reboot!"
-msgstr ""
+msgstr "Atenção: Existem mudanças não salvas que serão perdidas ao reiniciar!"
 
 msgid "Whether to create an IPv6 default route over the tunnel"
-msgstr ""
+msgstr "Se deve criar uma rota padrão IPv6 sobre o túnel"
 
 msgid "Whether to route only packets from delegated prefixes"
-msgstr ""
+msgstr "Se deve rotear somente pacotes de prefixos delegados"
 
 msgid "Width"
-msgstr ""
+msgstr "Largura"
 
 msgid "WireGuard VPN"
-msgstr ""
+msgstr "VPN WireGuard"
 
 msgid "Wireless"
 msgstr "Rede sem fio"
@@ -3696,10 +3915,7 @@ msgid "Write received DNS requests to syslog"
 msgstr "Escreva as requisições DNS para o servidor de registro (syslog)"
 
 msgid "Write system log to file"
-msgstr ""
-
-msgid "XR Support"
-msgstr "Suporte a XR"
+msgstr "Escrever registo do sistema (log) no arquivo"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3713,7 +3929,7 @@ msgstr ""
 "inacessível!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 "Você precisa habilitar o JavaScript no seu navegador ou o LuCI não irá "
 "funcionar corretamente."
@@ -3723,6 +3939,9 @@ msgid ""
 "upgrade it to at least version 7 or use another browser like Firefox, Opera "
 "or Safari."
 msgstr ""
+"Seu Internet Explorer é muito velho para mostrar esta página corretamente. "
+"Por favor, atualiza para, ao menos, a versão 7 ou use outro navegador como o "
+"Firefox, Opera ou Safari."
 
 msgid "any"
 msgstr "qualquer"
@@ -3730,10 +3949,6 @@ msgstr "qualquer"
 msgid "auto"
 msgstr "automático"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3756,7 +3971,7 @@ msgid "disable"
 msgstr "desativar"
 
 msgid "disabled"
-msgstr ""
+msgstr "desabilitado"
 
 msgid "expired"
 msgstr "expirado"
@@ -3784,7 +3999,7 @@ msgid "hidden"
 msgstr "ocultar"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "Modo Híbrido"
 
 msgid "if target is a network"
 msgstr "se o destino for uma rede"
@@ -3806,10 +4021,10 @@ msgstr ""
 "Arquivo local de <abbr title=\"Sistema de Nomes de Domínios\">DNS</abbr>"
 
 msgid "minimum 1280, maximum 1480"
-msgstr ""
+msgstr "mínimo 1280, máximo 1480"
 
-msgid "navigation Navigation"
-msgstr ""
+msgid "minutes"
+msgstr "minutos"
 
 # Is this yes/no or no like in no one?
 msgid "no"
@@ -3822,7 +4037,7 @@ msgid "none"
 msgstr "nenhum"
 
 msgid "not present"
-msgstr ""
+msgstr "não presente "
 
 msgid "off"
 msgstr "desligado"
@@ -3834,35 +4049,32 @@ msgid "open"
 msgstr "aberto"
 
 msgid "overlay"
-msgstr ""
+msgstr "sobreposição"
 
 msgid "relay mode"
-msgstr ""
+msgstr "modo retransmissor"
 
 msgid "routed"
 msgstr "roteado"
 
 msgid "server mode"
-msgstr ""
-
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
+msgstr "modo servidor"
 
 msgid "stateful-only"
-msgstr ""
+msgstr "somente com estado"
 
 msgid "stateless"
-msgstr ""
+msgstr "sem estado"
 
 msgid "stateless + stateful"
-msgstr ""
+msgstr "sem estado + com estado"
 
 msgid "tagged"
 msgstr "etiquetado"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr "unidades de tempo (TUs / 1.024 ms) [1000-65535]"
+
 msgid "unknown"
 msgstr "desconhecido"
 
@@ -3884,6 +4096,75 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Controlador Wireless Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "Busca em Segundo Plano"
+
+#~ msgid "Compression"
+#~ msgstr "Compressão"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Desativar temporizador de Beacon de Hardware"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Não enviar respostas de exames"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Quadros Rápidos"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Taxa Máxima"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Taxa Mínima"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Taxa de Multicast"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Canais para externo"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domínio Regulatório"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Separar WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS Estático"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Modo Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Suporte a XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Uma rede adicional será criada se você deixar isto desmarcado."
 
index 137d02a..7034d23 100644 (file)
@@ -52,12 +52,36 @@ msgstr "Carga de 1 Minuto:"
 msgid "15 Minute Load:"
 msgstr "Carga de 15 minutos:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Carga 5 Minutos:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 "<abbr title=\"Identificador de Conjunto Básico de Serviços\">BSSID</abbr>"
@@ -133,6 +157,11 @@ msgstr "<abbr title=\"máximo\">Max.</abbr> consultas concorrentes"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Emparelhada: %s / Grupo: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -151,9 +180,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Suporte AR"
-
 msgid "ARP retry threshold"
 msgstr "Limiar de tentativas ARP"
 
@@ -399,15 +425,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Estações Associadas"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Controlador Wireless Atheros 802.11%s"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autenticação"
 
@@ -480,9 +500,6 @@ msgstr "Voltar à vista global"
 msgid "Back to scan results"
 msgstr "Voltar aos resultados do scan"
 
-msgid "Background Scan"
-msgstr "Procurar em Segundo Plano"
-
 msgid "Backup / Flash Firmware"
 msgstr "Backup / Flashar Firmware"
 
@@ -651,8 +668,12 @@ msgstr "Comando"
 msgid "Common Configuration"
 msgstr "Configuração comum"
 
-msgid "Compression"
-msgstr "Compressão"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configuração"
@@ -874,12 +895,12 @@ msgstr "Desativar configuração de DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Desativar temporizador de HW-Beacon"
-
 msgid "Disabled"
 msgstr "Desativado"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Descartar respostas RFC1918 a montante"
 
@@ -921,9 +942,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Não encaminhar lookups reversos para as redes locais"
 
-msgid "Do not send probe responses"
-msgstr "Não enviar respostas a sondas"
-
 msgid "Domain required"
 msgstr "Requerer domínio"
 
@@ -1030,6 +1048,9 @@ msgstr "Ativar a funcionalidade VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Ativar aprendizagem e envelhecimento"
 
@@ -1054,6 +1075,11 @@ msgstr "Ativar/Desativar"
 msgid "Enabled"
 msgstr "Ativado"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Ativa o Spanning Tree nesta bridge"
 
@@ -1103,6 +1129,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Servidor externo de logs de sistema"
 
@@ -1115,9 +1147,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Frames Rápidas"
-
 msgid "File"
 msgstr "Ficheiro"
 
@@ -1153,6 +1182,9 @@ msgstr "Terminar"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Definições da Firewall"
 
@@ -1198,6 +1230,9 @@ msgstr "Forçar TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forçar TKIP e CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1449,9 +1484,15 @@ msgstr "Comprimento do prefixo IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "Endereço-IPv6"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-em-IPv4 (RFC4213)"
 
@@ -1464,7 +1505,7 @@ msgstr "IPv6-sobre-IPv4 (6to4)"
 msgid "Identity"
 msgstr "Identidade"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1552,6 +1593,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"
 
@@ -1598,6 +1642,9 @@ msgstr "O ID de VLAN fornecido é inválido! Só os IDs únicos são permitidos.
 msgid "Invalid username and/or password! Please try again."
 msgstr "Username inválido e/ou a password! Por favor, tente novamente."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1606,8 +1653,8 @@ msgstr ""
 "A imagem que está a tentar carregar aparenta não caber na flash do "
 "equipamento. Por favor verifique o ficheiro de imagem."
 
-msgid "Java Script required!"
-msgstr "É necessário Javascript!"
+msgid "JavaScript required!"
+msgstr "É necessário JavaScript!"
 
 msgid "Join Network"
 msgstr "Associar Rede"
@@ -1675,9 +1722,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"
 
@@ -1721,6 +1765,22 @@ msgstr ""
 "Lista de servidores <abbr title=\"Sistema Nomes de Domínio\">DNS</abbr> para "
 "onde encaminhar os pedidos"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1859,9 +1919,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Taxa Máxima"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Número máximo permitido de concessões DHCP ativas"
 
@@ -1897,9 +1954,6 @@ msgstr "Uso de memória (%)"
 msgid "Metric"
 msgstr "Métrica"
 
-msgid "Minimum Rate"
-msgstr "Taxa Mínima"
-
 msgid "Minimum hold time"
 msgstr "Tempo de retenção mínimo"
 
@@ -1912,6 +1966,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Falta a extensão de protocolo para o protocolo %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Modo"
 
@@ -1970,9 +2027,6 @@ msgstr "Subir"
 msgid "Move up"
 msgstr "Descer"
 
-msgid "Multicast Rate"
-msgstr "Taxa de Multicast"
-
 msgid "Multicast address"
 msgstr "Endereço de multicast"
 
@@ -1985,6 +2039,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2165,18 +2222,30 @@ msgstr "Opção alterada"
 msgid "Option removed"
 msgstr "Opção removida"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2213,9 +2282,6 @@ msgstr "Saída"
 msgid "Outbound:"
 msgstr "Saída:"
 
-msgid "Outdoor Channels"
-msgstr "Canais de Outdoor"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2263,6 +2329,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2320,6 +2389,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Password alterada com sucesso!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Directorio do Certificado CA"
 
@@ -2392,6 +2464,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2457,6 +2538,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Qualidade"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2549,6 +2636,9 @@ msgstr "Tráfego em Tempo Real"
 msgid "Realtime Wireless"
 msgstr "Wireless em Tempo Real"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Religar protecção"
 
@@ -2579,9 +2669,6 @@ msgstr "A reconectar interface"
 msgid "References"
 msgstr "Referências"
 
-msgid "Regulatory Domain"
-msgstr "Domínio Regulatório"
-
 msgid "Relay"
 msgstr ""
 
@@ -2621,19 +2708,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Necessário para certos ISPs, p.ex. Charter with DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2776,9 +2871,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Isolar Clientes"
 
-msgid "Separate WDS"
-msgstr "Separar WDS"
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2802,6 +2894,11 @@ msgstr "Tipo de Serviço"
 msgid "Services"
 msgstr "Serviços"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Configurar Sincronização Horária"
@@ -2937,9 +3034,6 @@ msgstr "Atribuições Estáticas"
 msgid "Static Routes"
 msgstr "Rotas Estáticas"
 
-msgid "Static WDS"
-msgstr "WDS Estático"
-
 msgid "Static address"
 msgstr "Endereço estático"
 
@@ -3348,9 +3442,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Modo Turbo"
-
 msgid "Tx-Power"
 msgstr "Potência de Tx"
 
@@ -3473,6 +3564,11 @@ msgstr "Usado"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3625,9 +3721,6 @@ msgstr "Escrever os pedidos de DNS para o syslog"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Suporte XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3640,9 +3733,9 @@ msgstr ""
 "inacessível!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Tem de activar o Java Script no seu browser ou a LuCI não funcionará "
+"Tem de activar o JavaScript no seu browser ou a LuCI não funcionará "
 "corretamente."
 
 msgid ""
@@ -3657,10 +3750,6 @@ msgstr "qualquer"
 msgid "auto"
 msgstr "automático"
 
-#, fuzzy
-msgid "automatic"
-msgstr "estático"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3735,7 +3824,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3771,12 +3860,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3789,6 +3872,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "desconhecido"
 
@@ -3810,6 +3896,61 @@ 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"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Controlador Wireless Atheros 802.11%s"
+
+#~ msgid "Background Scan"
+#~ msgstr "Procurar em Segundo Plano"
+
+#~ msgid "Compression"
+#~ msgstr "Compressão"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Desativar temporizador de HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Não enviar respostas a sondas"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Frames Rápidas"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Taxa Máxima"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Taxa Mínima"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Taxa de Multicast"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Canais de Outdoor"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domínio Regulatório"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Separar WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "WDS Estático"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Modo Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Suporte XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Uma rede adicional será criada se deixar isto desmarcado."
 
index 724f393..9587e4c 100644 (file)
@@ -51,12 +51,36 @@ msgstr "Incarcarea in ultimul minut"
 msgid "15 Minute Load:"
 msgstr "Incarcarea in ultimele 15 minute"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Incarcarea in ultimele 5 minute"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -124,6 +148,11 @@ msgstr "<abbr title=\"maximal\">Max.</abbr> interogari simultane"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -142,9 +171,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Suport AR"
-
 msgid "ARP retry threshold"
 msgstr "ARP prag reincercare"
 
@@ -385,15 +411,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Statiile asociate"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s Controler Fara Fir"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Autentificare"
 
@@ -466,9 +486,6 @@ msgstr "Inapoi la vedere generala"
 msgid "Back to scan results"
 msgstr "Inapoi la rezultatele scanarii"
 
-msgid "Background Scan"
-msgstr "Scanare in fundal"
-
 msgid "Backup / Flash Firmware"
 msgstr "Salveaza / Scrie Firmware"
 
@@ -626,8 +643,12 @@ msgstr "Comanda"
 msgid "Common Configuration"
 msgstr "Configurarea obisnuita"
 
-msgid "Compression"
-msgstr "Comprimare"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Configurare"
@@ -844,12 +865,12 @@ msgstr "Dezactiveaza configuratia DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr ""
-
 msgid "Disabled"
 msgstr "Dezactivat"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
 
@@ -884,9 +905,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr "Domeniul necesar"
 
@@ -985,6 +1003,9 @@ msgstr "Activeaza VLAN-urile"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1009,6 +1030,11 @@ msgstr "Activeaza/Dezactiveaza"
 msgid "Enabled"
 msgstr "Activat"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1055,6 +1081,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Server de log-uri extern"
 
@@ -1067,9 +1099,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr "Fisier"
 
@@ -1105,6 +1134,9 @@ msgstr "Termina"
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Setarile firewall-ului"
 
@@ -1151,6 +1183,9 @@ msgstr "Forteaza TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Forteaza TKIP si CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1396,9 +1431,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1411,7 +1452,7 @@ msgstr ""
 msgid "Identity"
 msgstr "Identitate"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1493,6 +1534,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"
 
@@ -1538,6 +1582,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Utilizator si/sau parola invalide! Incearcati din nou."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1546,8 +1593,8 @@ msgstr ""
 "Se pare ca ai incercat sa rescrii o imagine care nu are loc in memoria "
 "flash, verifica fisierul din nou!"
 
-msgid "Java Script required!"
-msgstr "Ai nevoie de Java Script !"
+msgid "JavaScript required!"
+msgstr "Ai nevoie de JavaScript !"
 
 msgid "Join Network"
 msgstr ""
@@ -1615,9 +1662,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -1659,6 +1703,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1791,9 +1851,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Rata maxima"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1829,9 +1886,6 @@ msgstr "Utilizarea memoriei (%)"
 msgid "Metric"
 msgstr "Metrica"
 
-msgid "Minimum Rate"
-msgstr "Rata minima"
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1844,6 +1898,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Mod"
 
@@ -1900,9 +1957,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr "Rata de multicast"
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1915,6 +1969,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2089,18 +2146,30 @@ msgstr "Optiunea schimbata"
 msgid "Option removed"
 msgstr "Optiunea eliminata"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2137,9 +2206,6 @@ msgstr "Iesire"
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2187,6 +2253,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2244,6 +2313,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Parola schimbata cu succes !"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Calea catre certificatul CA"
 
@@ -2316,6 +2388,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2381,6 +2462,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Calitate"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2462,6 +2549,9 @@ msgstr "Traficul in timp real"
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2492,9 +2582,6 @@ msgstr "Interfata se reconecteaza chiar acum"
 msgid "References"
 msgstr "Referinte"
 
-msgid "Regulatory Domain"
-msgstr "Domeniu regulatoriu"
-
 msgid "Relay"
 msgstr ""
 
@@ -2534,19 +2621,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2686,9 +2781,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr "Setarile serverului"
 
@@ -2712,6 +2804,11 @@ msgstr "Tip de serviciu"
 msgid "Services"
 msgstr "Servicii"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Configurare sincronizare timp"
@@ -2847,9 +2944,6 @@ msgstr ""
 msgid "Static Routes"
 msgstr "Rute statice"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3215,9 +3309,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Mod turbo"
-
 msgid "Tx-Power"
 msgstr "Puterea TX"
 
@@ -3340,6 +3431,11 @@ msgstr "Folosit"
 msgid "Used Key Slot"
 msgstr "Slot de cheie folosit"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3492,9 +3588,6 @@ msgstr "Scrie cererile DNS primite in syslog"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Suport XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3502,7 +3595,7 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3517,9 +3610,6 @@ msgstr "oricare"
 msgid "auto"
 msgstr "auto"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3591,7 +3681,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3627,12 +3717,6 @@ msgstr "rutat"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3645,6 +3729,9 @@ msgstr ""
 msgid "tagged"
 msgstr "etichetat"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "necunoscut"
 
@@ -3666,6 +3753,36 @@ msgstr "da"
 msgid "« Back"
 msgstr "« Inapoi"
 
+#~ msgid "AR Support"
+#~ msgstr "Suport AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s Controler Fara Fir"
+
+#~ msgid "Background Scan"
+#~ msgstr "Scanare in fundal"
+
+#~ msgid "Compression"
+#~ msgstr "Comprimare"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Rata maxima"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Rata minima"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Rata de multicast"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Domeniu regulatoriu"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Mod turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Suport XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr ""
 #~ "Daca lasati aceasta optiune neselectata va fi creata o retea aditionala"
index 039ef14..f52e618 100644 (file)
@@ -54,12 +54,36 @@ msgstr "Загрузка за 1 минуту:"
 msgid "15 Minute Load:"
 msgstr "Загрузка за 15 минут:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Загрузка за 5 минут:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Базовый идентификатор обслуживания\">BSSID</abbr>"
 
@@ -131,6 +155,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Парный: %s / Групповой: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -149,9 +178,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "Поддержка AR"
-
 msgid "ARP retry threshold"
 msgstr "Порог повтора ARP"
 
@@ -398,15 +424,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Подключенные клиенты"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Беспроводной 802.11%s контроллер Atheros"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Аутентификация"
 
@@ -479,9 +499,6 @@ msgstr "Назад к обзору"
 msgid "Back to scan results"
 msgstr "Назад к результатам сканирования"
 
-msgid "Background Scan"
-msgstr "Фоновое сканирование"
-
 msgid "Backup / Flash Firmware"
 msgstr "Резервная копия / прошивка"
 
@@ -651,8 +668,12 @@ msgstr "Команда"
 msgid "Common Configuration"
 msgstr "Общая конфигурация"
 
-msgid "Compression"
-msgstr "Сжатие"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Конфигурация"
@@ -873,12 +894,12 @@ msgstr "Отключить настройку DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Отключить таймер HW-Beacon"
-
 msgid "Disabled"
 msgstr "Отключено"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Отбрасывать ответы RFC1918"
 
@@ -919,9 +940,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Не перенаправлять обратные DNS-запросы для локальных сетей"
 
-msgid "Do not send probe responses"
-msgstr "Не посылать тестовые ответы"
-
 msgid "Domain required"
 msgstr "Требуется домен"
 
@@ -1031,6 +1049,9 @@ msgstr "Включить поддержку VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Включить изучение и устаревание (learning/aging)"
 
@@ -1055,6 +1076,11 @@ msgstr "Включить/выключить"
 msgid "Enabled"
 msgstr "Включено"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Включает Spanning Tree Protocol на этом мосту"
 
@@ -1104,6 +1130,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Сервер системного журнала"
 
@@ -1116,9 +1148,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Быстрые кадры"
-
 msgid "File"
 msgstr "Файл"
 
@@ -1154,6 +1183,9 @@ msgstr "Завершить"
 msgid "Firewall"
 msgstr "Межсетевой экран"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Настройки межсетевого экрана"
 
@@ -1200,6 +1232,9 @@ msgstr "Требовать TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "TKIP или CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1448,9 +1483,15 @@ msgstr "Длина префикса IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-адрес"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6 в IPv4 (RFC4213)"
 
@@ -1463,7 +1504,7 @@ msgstr "IPv6 через IPv4 (6to4)"
 msgid "Identity"
 msgstr "Идентификация EAP"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1555,6 +1596,9 @@ msgstr "Установленные пакеты"
 msgid "Interface"
 msgstr "Интерфейс"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Конфигурация интерфейса"
 
@@ -1602,6 +1646,9 @@ msgstr "Указан неверный VLAN ID! Доступны только у
 msgid "Invalid username and/or password! Please try again."
 msgstr "Неверный логин и/или пароль! Пожалуйста попробуйте снова."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1610,8 +1657,8 @@ msgstr ""
 "Вы пытаетесь обновить прошивку файлом, который не помещается в память "
 "устройства! Пожалуйста, проверьте файл образа."
 
-msgid "Java Script required!"
-msgstr "Требуется Java Script!"
+msgid "JavaScript required!"
+msgstr "Требуется JavaScript!"
 
 msgid "Join Network"
 msgstr "Подключение к сети"
@@ -1679,9 +1726,6 @@ msgstr "Срок действия аренды"
 msgid "Leasefile"
 msgstr "Файл аренд"
 
-msgid "Leasetime"
-msgstr "Время аренды"
-
 msgid "Leasetime remaining"
 msgstr "Оставшееся время аренды"
 
@@ -1725,6 +1769,22 @@ msgstr ""
 "Список <abbr title=\"Domain Name System\">DNS</abbr>-серверов для "
 "перенаправления запросов"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1864,9 +1924,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Максимальная скорость"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Максимальное количество активных арендованных DHCP-адресов"
 
@@ -1902,9 +1959,6 @@ msgstr "Использование памяти (%)"
 msgid "Metric"
 msgstr "Метрика"
 
-msgid "Minimum Rate"
-msgstr "Минимальная скорость"
-
 msgid "Minimum hold time"
 msgstr "Минимальное время удержания"
 
@@ -1917,6 +1971,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Отсутствует расширение протокола %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Режим"
 
@@ -1976,9 +2033,6 @@ msgstr "Переместить вниз"
 msgid "Move up"
 msgstr "Переместить вверх"
 
-msgid "Multicast Rate"
-msgstr "Скорость групповой передачи"
-
 msgid "Multicast address"
 msgstr "Адрес групповой передачи"
 
@@ -1991,6 +2045,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2171,18 +2228,30 @@ msgstr "Опция изменена"
 msgid "Option removed"
 msgstr "Опция удалена"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2219,9 +2288,6 @@ msgstr "Вне"
 msgid "Outbound:"
 msgstr "Исходящий:"
 
-msgid "Outdoor Channels"
-msgstr "Внешние каналы"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2271,6 +2337,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2328,6 +2397,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Пароль успешно изменён!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Путь к центру сертификации"
 
@@ -2400,6 +2472,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2467,6 +2548,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Качество"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2559,6 +2646,9 @@ msgstr "Трафик в реальном времени"
 msgid "Realtime Wireless"
 msgstr "Беспроводная сеть в реальном времени"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Защита от DNS Rebinding"
 
@@ -2590,9 +2680,6 @@ msgstr "Интерфейс переподключается"
 msgid "References"
 msgstr "Ссылки"
 
-msgid "Regulatory Domain"
-msgstr "Нормативная зона"
-
 msgid "Relay"
 msgstr "Ретранслятор"
 
@@ -2632,19 +2719,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Требуется для некоторых интернет-провайдеров"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2788,9 +2883,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Разделять клиентов"
 
-msgid "Separate WDS"
-msgstr "Отдельный WDS"
-
 msgid "Server Settings"
 msgstr "Настройки сервера"
 
@@ -2814,6 +2906,11 @@ msgstr "Тип службы"
 msgid "Services"
 msgstr "Сервисы"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Настроить синхронизацию времени"
@@ -2955,9 +3052,6 @@ msgstr "Постоянные аренды"
 msgid "Static Routes"
 msgstr "Статические маршруты"
 
-msgid "Static WDS"
-msgstr "Статический WDS"
-
 msgid "Static address"
 msgstr "Статический адрес"
 
@@ -3382,9 +3476,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Турбо-режим"
-
 msgid "Tx-Power"
 msgstr "Мощность передатчика"
 
@@ -3514,6 +3605,11 @@ msgstr "Использовано"
 msgid "Used Key Slot"
 msgstr "Используемый слот ключа"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3667,9 +3763,6 @@ msgstr "Записывать полученные DNS-запросы в сист
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Поддержка XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3681,9 +3774,9 @@ msgstr ""
 "(например \"network\"), ваше устройство может оказаться недоступным!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Вам необходимо включить Java Script в вашем браузере для корректной работы "
+"Вам необходимо включить JavaScript в вашем браузере для корректной работы "
 "LuCI."
 
 msgid ""
@@ -3698,10 +3791,6 @@ msgstr "любой"
 msgid "auto"
 msgstr "авто"
 
-#, fuzzy
-msgid "automatic"
-msgstr "статический"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3776,7 +3865,7 @@ msgstr "локальный <abbr title=\"Служба доменных имён\
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3812,12 +3901,6 @@ msgstr "маршрутизируемый"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3830,6 +3913,9 @@ msgstr ""
 msgid "tagged"
 msgstr "с тегом"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "неизвестный"
 
@@ -3851,6 +3937,61 @@ msgstr "да"
 msgid "« Back"
 msgstr "« Назад"
 
+#~ msgid "Leasetime"
+#~ msgstr "Время аренды"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "статический"
+
+#~ msgid "AR Support"
+#~ msgstr "Поддержка AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Беспроводной 802.11%s контроллер Atheros"
+
+#~ msgid "Background Scan"
+#~ msgstr "Фоновое сканирование"
+
+#~ msgid "Compression"
+#~ msgstr "Сжатие"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Отключить таймер HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Не посылать тестовые ответы"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Быстрые кадры"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Максимальная скорость"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Минимальная скорость"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Скорость групповой передачи"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Внешние каналы"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Нормативная зона"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Отдельный WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Статический WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Турбо-режим"
+
+#~ msgid "XR Support"
+#~ msgstr "Поддержка XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr ""
 #~ "Если вы не выберите эту опцию, то будет создана дополнительная сеть."
index 93fd8ef..ec97162 100644 (file)
@@ -47,12 +47,36 @@ msgstr ""
 msgid "15 Minute Load:"
 msgstr ""
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr ""
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 
@@ -115,6 +139,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -133,9 +162,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr ""
-
 msgid "ARP retry threshold"
 msgstr ""
 
@@ -371,15 +397,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr ""
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -452,9 +472,6 @@ msgstr ""
 msgid "Back to scan results"
 msgstr ""
 
-msgid "Background Scan"
-msgstr ""
-
 msgid "Backup / Flash Firmware"
 msgstr ""
 
@@ -609,7 +626,11 @@ msgstr ""
 msgid "Common Configuration"
 msgstr ""
 
-msgid "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
 msgstr ""
 
 msgid "Configuration"
@@ -825,10 +846,10 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
+msgid "Disabled"
 msgstr ""
 
-msgid "Disabled"
+msgid "Disabled (default)"
 msgstr ""
 
 msgid "Discard upstream RFC1918 responses"
@@ -865,9 +886,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr ""
 
@@ -966,6 +984,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -990,6 +1011,11 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1036,6 +1062,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1048,9 +1080,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr ""
 
@@ -1086,6 +1115,9 @@ msgstr ""
 msgid "Firewall"
 msgstr ""
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr ""
 
@@ -1131,6 +1163,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1374,9 +1409,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1389,7 +1430,7 @@ msgstr ""
 msgid "Identity"
 msgstr ""
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1471,6 +1512,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1516,12 +1560,15 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr ""
 
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1590,9 +1637,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -1634,6 +1678,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1766,9 +1826,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1804,9 +1861,6 @@ msgstr ""
 msgid "Metric"
 msgstr ""
 
-msgid "Minimum Rate"
-msgstr ""
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1819,6 +1873,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr ""
 
@@ -1875,9 +1932,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr ""
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1890,6 +1944,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2064,18 +2121,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2112,9 +2181,6 @@ msgstr ""
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2162,6 +2228,9 @@ msgstr ""
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2219,6 +2288,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr ""
 
@@ -2291,6 +2363,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2356,6 +2437,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2435,6 +2522,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2465,9 +2555,6 @@ msgstr ""
 msgid "References"
 msgstr ""
 
-msgid "Regulatory Domain"
-msgstr ""
-
 msgid "Relay"
 msgstr ""
 
@@ -2507,19 +2594,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2659,9 +2754,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2685,6 +2777,11 @@ msgstr ""
 msgid "Services"
 msgstr ""
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2819,9 +2916,6 @@ msgstr ""
 msgid "Static Routes"
 msgstr ""
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3185,9 +3279,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr ""
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3310,6 +3401,11 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3460,9 +3556,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr ""
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3470,7 +3563,7 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3485,9 +3578,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3559,7 +3649,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3595,12 +3685,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3613,6 +3697,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
index f671dbf..cd60491 100644 (file)
@@ -2,7 +2,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "PO-Revision-Date: 2014-04-28 09:22+0200\n"
-"Last-Translator: EricJ <ericj@acc.umu.se>\n"
+"Last-Translator: Kristoffer Grundström <hamnisdude@gmail.com>\n"
 "Language-Team: none\n"
 "Language: sv\n"
 "MIME-Version: 1.0\n"
@@ -12,10 +12,10 @@ msgstr ""
 "X-Generator: Pootle 2.0.6\n"
 
 msgid "%s is untagged in multiple VLANs!"
-msgstr ""
+msgstr "%s är inte taggad i flera VLAN!"
 
 msgid "(%d minute window, %d second interval)"
-msgstr ""
+msgstr "(%d minut-fönster, %d sekundintervall)"
 
 msgid "(%s available)"
 msgstr "(%s tillgängligt)"
@@ -27,22 +27,22 @@ msgid "(no interfaces attached)"
 msgstr "(inga gränssnitt har bifogats)"
 
 msgid "-- Additional Field --"
-msgstr ""
+msgstr "-- Ytterligare fält --"
 
 msgid "-- Please choose --"
-msgstr ""
+msgstr "-- Vänligen välj --"
 
 msgid "-- custom --"
 msgstr "-- anpassad --"
 
 msgid "-- match by device --"
-msgstr ""
+msgstr "-- matcha enligt enhet --"
 
 msgid "-- match by label --"
-msgstr ""
+msgstr "-- matcha enligt märke --"
 
 msgid "-- match by uuid --"
-msgstr ""
+msgstr "-- matcha enligt uuid --"
 
 msgid "1 Minute Load:"
 msgstr "Belastning senaste minuten:"
@@ -50,12 +50,36 @@ msgstr "Belastning senaste minuten:"
 msgid "15 Minute Load:"
 msgstr "Belastning senaste 15 minutrarna:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Belastning senaste 5 minutrarna:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr "802.11r Snabb förvandling"
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -119,28 +143,32 @@ msgid "<abbr title=\"maximal\">Max.</abbr> concurrent queries"
 msgstr ""
 
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
+msgstr "<abbr title='Pairvis: %s / Grupp: %s'>%s - %s</abbr>"
+
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
 msgstr ""
+"<br/>Notera att: du måste starta om cron-tjänsten om crontab-filen var tom "
+"innan den ändrades."
 
 msgid "A43C + J43 + A43"
-msgstr ""
+msgstr "A43C + J43 + A43"
 
 msgid "A43C + J43 + A43 + V43"
-msgstr ""
+msgstr "A43C + J43 + A43 + V43"
 
 msgid "ADSL"
-msgstr ""
+msgstr "ADSL"
 
 msgid "AICCU (SIXXS)"
-msgstr ""
+msgstr "AICCU (SIXXS)"
 
 msgid "ANSI T1.413"
-msgstr ""
+msgstr "ANSI T1.413"
 
 msgid "APN"
-msgstr ""
-
-msgid "AR Support"
-msgstr ""
+msgstr "APN"
 
 msgid "ARP retry threshold"
 msgstr ""
@@ -149,7 +177,7 @@ msgid "ATM (Asynchronous Transfer Mode)"
 msgstr ""
 
 msgid "ATM Bridges"
-msgstr ""
+msgstr "ATM-bryggor"
 
 msgid "ATM Virtual Channel Identifier (VCI)"
 msgstr ""
@@ -170,109 +198,112 @@ msgid "ATU-C System Vendor ID"
 msgstr ""
 
 msgid "AYIYA"
-msgstr ""
+msgstr "AYIYA"
 
 msgid "Access Concentrator"
 msgstr ""
 
 msgid "Access Point"
-msgstr ""
+msgstr "Accesspunkt"
 
 msgid "Action"
-msgstr ""
+msgstr "Åtgärd"
 
 msgid "Actions"
-msgstr ""
+msgstr "Åtgärder"
 
 msgid "Activate this network"
-msgstr ""
+msgstr "Aktivera det här nätverket"
 
 msgid "Active <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-Routes"
-msgstr ""
+msgstr "Aktiva <abbr title=\"Internet Protocol Version 4\">IPv4</abbr>-rutter"
 
 msgid "Active <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Routes"
-msgstr ""
+msgstr "Aktiva <abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-rutter"
 
 msgid "Active Connections"
-msgstr ""
+msgstr "Aktiva anslutningar"
 
 msgid "Active DHCP Leases"
-msgstr ""
+msgstr "Aktiva DHCP-kontrakt"
 
 msgid "Active DHCPv6 Leases"
-msgstr ""
+msgstr "Aktiva DHCPv6-kontrakt"
 
 msgid "Ad-Hoc"
-msgstr ""
+msgstr "Ad-Hoc"
 
 msgid "Add"
-msgstr ""
+msgstr "Lägg till"
 
 msgid "Add local domain suffix to names served from hosts files"
 msgstr ""
 
 msgid "Add new interface..."
-msgstr ""
+msgstr "Lägg till ett nytt gränssnitt"
 
 msgid "Additional Hosts files"
-msgstr ""
+msgstr "Ytterligare värdfiler"
 
 msgid "Additional servers file"
-msgstr ""
+msgstr "Ytterligare server-filer"
 
 msgid "Address"
-msgstr ""
+msgstr "Adress"
 
 msgid "Address to access local relay bridge"
-msgstr ""
+msgstr "Adress för att komma åt lokal reläbrygga"
 
 msgid "Administration"
-msgstr ""
+msgstr "Administration"
 
 msgid "Advanced Settings"
-msgstr ""
+msgstr "Avancerade inställningar"
 
 msgid "Aggregate Transmit Power(ACTATP)"
 msgstr ""
 
 msgid "Alert"
-msgstr ""
+msgstr "Varning"
 
 msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
 "address"
 msgstr ""
+"Allokera IP-adresser sekventiellt med start från den lägsta möjliga adressen"
 
 msgid "Allocate IP sequentially"
-msgstr ""
+msgstr "Allokera IP sekventiellt"
 
 msgid "Allow <abbr title=\"Secure Shell\">SSH</abbr> password authentication"
-msgstr ""
+msgstr "Tillåt <abbr title=\"Secure Shell\">SSH</abbr> lösenordsautentisering"
 
 msgid "Allow all except listed"
-msgstr ""
+msgstr "Tillåt alla utom listade"
 
 msgid "Allow listed only"
-msgstr ""
+msgstr "Tillåt enbart listade"
 
 msgid "Allow localhost"
-msgstr ""
+msgstr "Tillåt localhost"
 
 msgid "Allow remote hosts to connect to local SSH forwarded ports"
 msgstr ""
+"Tillåt fjärrstyrda värdar att ansluta via SSH till lokalt vidarebefordrade "
+"portar"
 
 msgid "Allow root logins with password"
-msgstr ""
+msgstr "Tillåt root-inloggningar med lösenord"
 
 msgid "Allow the <em>root</em> user to login with password"
-msgstr ""
+msgstr "Tillåt <em>root</em>-användaren att logga in med lösenord"
 
 msgid ""
 "Allow upstream responses in the 127.0.0.0/8 range, e.g. for RBL services"
 msgstr ""
 
 msgid "Allowed IPs"
-msgstr ""
+msgstr "Tillåtna IP-adresser"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
@@ -331,84 +362,78 @@ msgid "Announce as default router even if no public prefix is available."
 msgstr ""
 
 msgid "Announced DNS domains"
-msgstr ""
+msgstr "Aviserade DNS-domäner"
 
 msgid "Announced DNS servers"
-msgstr ""
+msgstr "Aviserade DNS-servrar"
 
 msgid "Anonymous Identity"
-msgstr ""
+msgstr "Anonym identitet"
 
 msgid "Anonymous Mount"
-msgstr ""
+msgstr "Anonym montering"
 
 msgid "Anonymous Swap"
-msgstr ""
+msgstr "Anonym Swap"
 
 msgid "Antenna 1"
-msgstr ""
+msgstr "Antenn 1"
 
 msgid "Antenna 2"
-msgstr ""
+msgstr "Antenn 2"
 
 msgid "Antenna Configuration"
-msgstr ""
+msgstr "Konfiguration av antenn"
 
 msgid "Any zone"
-msgstr ""
+msgstr "Någon zon"
 
 msgid "Apply"
-msgstr ""
+msgstr "Verkställ"
 
 msgid "Applying changes"
-msgstr ""
+msgstr "Verkställer ändringar"
 
 msgid ""
 "Assign a part of given length of every public IPv6-prefix to this interface"
 msgstr ""
 
 msgid "Assign interfaces..."
-msgstr ""
+msgstr "Tilldela gränssnitten..."
 
 msgid ""
 "Assign prefix parts using this hexadecimal subprefix ID for this interface."
 msgstr ""
 
 msgid "Associated Stations"
-msgstr ""
-
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
+msgstr "Associerade stationer"
 
 msgid "Auth Group"
-msgstr ""
-
-msgid "AuthGroup"
-msgstr ""
+msgstr "Autentiseringsgrupp"
 
 msgid "Authentication"
-msgstr ""
+msgstr "Autentisering"
 
 msgid "Authentication Type"
-msgstr ""
+msgstr "Typ av autentisering"
 
 msgid "Authoritative"
-msgstr ""
+msgstr "Auktoritiv"
 
 msgid "Authorization Required"
-msgstr ""
+msgstr "Tillstånd krävs"
 
 msgid "Auto Refresh"
-msgstr ""
+msgstr "Uppdatera automatiskt"
 
 msgid "Automatic"
-msgstr ""
+msgstr "Automatisk"
 
 msgid "Automatic Homenet (HNCP)"
-msgstr ""
+msgstr "Automatiskt hemnet (HNCP)"
 
 msgid "Automatically check filesystem for errors before mounting"
-msgstr ""
+msgstr "Kolla efter fel i filsystemet automatiskt innan det monteras"
 
 msgid "Automatically mount filesystems on hotplug"
 msgstr ""
@@ -417,67 +442,64 @@ msgid "Automatically mount swap on hotplug"
 msgstr ""
 
 msgid "Automount Filesystem"
-msgstr ""
+msgstr "Monstera filsystem automatiskt"
 
 msgid "Automount Swap"
-msgstr ""
+msgstr "Montera Swap automatiskt"
 
 msgid "Available"
-msgstr ""
+msgstr "Tillgänglig"
 
 msgid "Available packages"
-msgstr ""
+msgstr "Tillgängliga paket"
 
 msgid "Average:"
-msgstr ""
+msgstr "Snitt:"
 
 msgid "B43 + B43C"
-msgstr ""
+msgstr "B43 + B43C"
 
 msgid "B43 + B43C + V43"
-msgstr ""
+msgstr "B43 + B43C + V43"
 
 msgid "BR / DMR / AFTR"
-msgstr ""
+msgstr "BR / DMR / AFTR"
 
 msgid "BSSID"
-msgstr ""
+msgstr "BSSID"
 
 msgid "Back"
-msgstr ""
+msgstr "Bakåt"
 
 msgid "Back to Overview"
-msgstr ""
+msgstr "Backa till Överblick"
 
 msgid "Back to configuration"
-msgstr ""
+msgstr "Backa till konfiguration"
 
 msgid "Back to overview"
-msgstr ""
+msgstr "Backa till överblick"
 
 msgid "Back to scan results"
-msgstr ""
-
-msgid "Background Scan"
-msgstr ""
+msgstr "Backa till skanningsresultat"
 
 msgid "Backup / Flash Firmware"
-msgstr ""
+msgstr "Säkerhetskopiera / Flasha inre mjukvara"
 
 msgid "Backup / Restore"
-msgstr ""
+msgstr "Säkerhetskopiera / Återställ"
 
 msgid "Backup file list"
-msgstr ""
+msgstr "Säkerhetskopiera fillista"
 
 msgid "Bad address specified!"
-msgstr ""
+msgstr "Fel adress angiven!"
 
 msgid "Band"
-msgstr ""
+msgstr "Band"
 
 msgid "Behind NAT"
-msgstr ""
+msgstr "Bakom NAT"
 
 msgid ""
 "Below is the determined list of files to backup. It consists of changed "
@@ -486,7 +508,7 @@ msgid ""
 msgstr ""
 
 msgid "Bind interface"
-msgstr ""
+msgstr "Bind gränssnitt"
 
 msgid "Bind only to specific interfaces rather than wildcard address."
 msgstr ""
@@ -495,16 +517,16 @@ msgid "Bind the tunnel to this interface (optional)."
 msgstr ""
 
 msgid "Bitrate"
-msgstr ""
+msgstr "Bithastighet"
 
 msgid "Bogus NX Domain Override"
 msgstr ""
 
 msgid "Bridge"
-msgstr ""
+msgstr "Brygga"
 
 msgid "Bridge interfaces"
-msgstr ""
+msgstr "Brygga gränssnitt"
 
 msgid "Bridge unit number"
 msgstr ""
@@ -513,13 +535,13 @@ msgid "Bring up on boot"
 msgstr ""
 
 msgid "Broadcom 802.11%s Wireless Controller"
-msgstr ""
+msgstr "Broadcom 802.11%s Trådlös kontroller"
 
 msgid "Broadcom BCM%04x 802.11 Wireless Controller"
-msgstr ""
+msgstr "Broadcom BCM%04x 802.11 Trådlös kontroller"
 
 msgid "Buffered"
-msgstr ""
+msgstr "Buffrad"
 
 msgid ""
 "Build/distribution specific feed definitions. This file will NOT be "
@@ -527,46 +549,49 @@ msgid ""
 msgstr ""
 
 msgid "Buttons"
-msgstr ""
+msgstr "Knappar"
 
 msgid "CA certificate; if empty it will be saved after the first connection."
 msgstr ""
+"CA-certifikat; om tom så kommer den att sparas efter första anslutningen."
 
 msgid "CPU usage (%)"
-msgstr ""
+msgstr "CPU-användning (%)"
 
 msgid "Cancel"
-msgstr ""
+msgstr "Avbryt"
 
 msgid "Category"
-msgstr ""
+msgstr "Kategori"
 
 msgid "Chain"
-msgstr ""
+msgstr "Kedja"
 
 msgid "Changes"
-msgstr ""
+msgstr "Ändringar"
 
 msgid "Changes applied."
-msgstr ""
+msgstr "Tillämpade ändringar"
 
 msgid "Changes the administrator password for accessing the device"
-msgstr ""
+msgstr "Ändrar administratörens lösenord för att få tillgång till enheten"
 
 msgid "Channel"
-msgstr ""
+msgstr "Kanal"
 
 msgid "Check"
-msgstr ""
+msgstr "Kontrollera"
 
 msgid "Check fileystems before mount"
-msgstr ""
+msgstr "Kontrollera filsystemen innan de monteras"
 
 msgid "Check this option to delete the existing networks from this radio."
 msgstr ""
+"Bocka för det här alternativet för att ta bort befintliga nätverk från den "
+"här radion."
 
 msgid "Checksum"
-msgstr ""
+msgstr "Checksumma"
 
 msgid ""
 "Choose the firewall zone you want to assign to this interface. Select "
@@ -581,7 +606,7 @@ msgid ""
 msgstr ""
 
 msgid "Cipher"
-msgstr ""
+msgstr "Chiffer"
 
 msgid "Cisco UDP encapsulation"
 msgstr ""
@@ -593,10 +618,10 @@ msgid ""
 msgstr ""
 
 msgid "Client"
-msgstr ""
+msgstr "Klient"
 
 msgid "Client ID to send when requesting DHCP"
-msgstr ""
+msgstr "Klient-ID att skicka vid DHCP-förfrågning"
 
 msgid ""
 "Close inactive connection after the given amount of seconds, use 0 to "
@@ -604,52 +629,56 @@ msgid ""
 msgstr ""
 
 msgid "Close list..."
-msgstr ""
+msgstr "Stäng ner lista..."
 
 msgid "Collecting data..."
-msgstr ""
+msgstr "Samlar in data..."
 
 msgid "Command"
-msgstr ""
+msgstr "Kommando"
 
 msgid "Common Configuration"
-msgstr ""
+msgstr "Vanlig konfiguration"
 
-msgid "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
 msgstr ""
 
 msgid "Configuration"
-msgstr ""
+msgstr "Konfiguration"
 
 msgid "Configuration applied."
-msgstr ""
+msgstr "Konfigurationen tillämpades"
 
 msgid "Configuration files will be kept."
-msgstr ""
+msgstr "Konfigurationsfiler kommer att behållas."
 
 msgid "Confirmation"
-msgstr ""
+msgstr "Bekräftelse"
 
 msgid "Connect"
-msgstr ""
+msgstr "Anslut"
 
 msgid "Connected"
-msgstr ""
+msgstr "Ansluten"
 
 msgid "Connection Limit"
-msgstr ""
+msgstr "Anslutningsgräns"
 
 msgid "Connection to server fails when TLS cannot be used"
 msgstr ""
 
 msgid "Connections"
-msgstr ""
+msgstr "Anslutningar"
 
 msgid "Country"
-msgstr ""
+msgstr "Land"
 
 msgid "Country Code"
-msgstr ""
+msgstr "Landskod"
 
 msgid "Cover the following interface"
 msgstr ""
@@ -661,19 +690,19 @@ msgid "Create / Assign firewall-zone"
 msgstr ""
 
 msgid "Create Interface"
-msgstr ""
+msgstr "Skapa gränssnitt"
 
 msgid "Create a bridge over multiple interfaces"
-msgstr ""
+msgstr "Skapa en brygga över flera gränssnitt"
 
 msgid "Critical"
-msgstr ""
+msgstr "Kritisk"
 
 msgid "Cron Log Level"
-msgstr ""
+msgstr "Loggnivå för Cron"
 
 msgid "Custom Interface"
-msgstr ""
+msgstr "Anpassat gränssnitt"
 
 msgid "Custom delegated IPv6-prefix"
 msgstr ""
@@ -684,7 +713,7 @@ msgid ""
 msgstr ""
 
 msgid "Custom feeds"
-msgstr ""
+msgstr "Anpassade flöden"
 
 msgid ""
 "Customizes the behaviour of the device <abbr title=\"Light Emitting Diode"
@@ -692,34 +721,34 @@ msgid ""
 msgstr ""
 
 msgid "DHCP Leases"
-msgstr ""
+msgstr "DHCP-kontrakt"
 
 msgid "DHCP Server"
-msgstr ""
+msgstr "DHCP-server"
 
 msgid "DHCP and DNS"
-msgstr ""
+msgstr "DHCP och DNS"
 
 msgid "DHCP client"
-msgstr ""
+msgstr "DHCP-klient"
 
 msgid "DHCP-Options"
-msgstr ""
+msgstr "DHCP-alternativ"
 
 msgid "DHCPv6 Leases"
-msgstr ""
+msgstr "DHCPv6-kontrakt"
 
 msgid "DHCPv6 client"
-msgstr ""
+msgstr "DHCPv6-klient"
 
 msgid "DHCPv6-Mode"
-msgstr ""
+msgstr "DHCPv6-läge"
 
 msgid "DHCPv6-Service"
-msgstr ""
+msgstr "DHCPv6-tjänst"
 
 msgid "DNS"
-msgstr ""
+msgstr "DNS"
 
 msgid "DNS forwardings"
 msgstr ""
@@ -740,10 +769,10 @@ msgid "DS-Lite AFTR address"
 msgstr ""
 
 msgid "DSL"
-msgstr ""
+msgstr "DSL"
 
 msgid "DSL Status"
-msgstr ""
+msgstr "DSL-status"
 
 msgid "DSL line mode"
 msgstr ""
@@ -752,28 +781,28 @@ msgid "DUID"
 msgstr ""
 
 msgid "Data Rate"
-msgstr ""
+msgstr "Datahastighet"
 
 msgid "Debug"
-msgstr ""
+msgstr "Avlusa"
 
 msgid "Default %d"
-msgstr ""
+msgstr "Standard %d"
 
 msgid "Default gateway"
-msgstr ""
+msgstr "Standard gateway"
 
 msgid "Default is stateless + stateful"
 msgstr ""
 
 msgid "Default route"
-msgstr ""
+msgstr "Standardrutt"
 
 msgid "Default state"
 msgstr ""
 
 msgid "Define a name for this network."
-msgstr ""
+msgstr "Ange ett namn för det här nätverket."
 
 msgid ""
 "Define additional DHCP options, for example "
@@ -782,60 +811,62 @@ msgid ""
 msgstr ""
 
 msgid "Delete"
-msgstr ""
+msgstr "Radera"
 
 msgid "Delete this network"
-msgstr ""
+msgstr "Ta bort det här nätverket"
 
 msgid "Description"
-msgstr ""
+msgstr "Beskrivning"
 
 msgid "Design"
 msgstr ""
 
 msgid "Destination"
-msgstr ""
+msgstr "Plats"
 
 msgid "Device"
-msgstr ""
+msgstr "Enhet"
 
 msgid "Device Configuration"
-msgstr ""
+msgstr "Enhetskonfiguration"
 
 msgid "Device is rebooting..."
-msgstr ""
+msgstr "Enheten startar om..."
 
 msgid "Device unreachable"
-msgstr ""
+msgstr "Enheten kan inte nås"
 
 msgid "Diagnostics"
 msgstr ""
 
 msgid "Dial number"
-msgstr ""
+msgstr "Slå nummer"
 
 msgid "Directory"
-msgstr ""
+msgstr "Mapp"
 
 msgid "Disable"
-msgstr ""
+msgstr "Inaktivera"
 
 msgid ""
 "Disable <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> for "
 "this interface."
 msgstr ""
+"Inaktivera <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr> "
+"för det här gränssnittet."
 
 msgid "Disable DNS setup"
 msgstr ""
 
 msgid "Disable Encryption"
-msgstr ""
-
-msgid "Disable HW-Beacon timer"
-msgstr ""
+msgstr "Inaktivera kryptering"
 
 msgid "Disabled"
-msgstr ""
+msgstr "Inaktiverad"
+
+msgid "Disabled (default)"
+msgstr "Inaktiverad (standard)"
 
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
@@ -844,16 +875,16 @@ msgid "Displaying only packages containing"
 msgstr ""
 
 msgid "Distance Optimization"
-msgstr ""
+msgstr "Avståndsoptimering"
 
 msgid "Distance to farthest network member in meters."
-msgstr ""
+msgstr "Avstånd till nätverksmledlemmen längst bort i metrar."
 
 msgid "Distribution feeds"
 msgstr ""
 
 msgid "Diversity"
-msgstr ""
+msgstr "Mångfald"
 
 msgid ""
 "Dnsmasq is a combined <abbr title=\"Dynamic Host Configuration Protocol"
@@ -863,39 +894,40 @@ msgid ""
 msgstr ""
 
 msgid "Do not cache negative replies, e.g. for not existing domains"
-msgstr ""
+msgstr "Cachea inte negativa svar, t.ex för icke-existerade domäner"
 
 msgid "Do not forward requests that cannot be answered by public name servers"
 msgstr ""
+"Vidarebefordra inte förfrågningar som inte kan ta emot svar från publika "
+"namnservrar"
 
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
-msgstr ""
+msgstr "Domän krävs"
 
 msgid "Domain whitelist"
-msgstr ""
+msgstr "Vitlista för domäner"
 
 msgid "Don't Fragment"
-msgstr ""
+msgstr "Fragmentera inte"
 
 msgid ""
 "Don't forward <abbr title=\"Domain Name System\">DNS</abbr>-Requests without "
 "<abbr title=\"Domain Name System\">DNS</abbr>-Name"
 msgstr ""
+"Vidarebefordra inte <abbr title=\"Domain Name System\">DNS</abbr>-"
+"förfrågningar utan <abbr title=\"Domain Name System\">DNS</abbr>-namn"
 
 msgid "Download and install package"
-msgstr ""
+msgstr "Ladda ner och installera paket"
 
 msgid "Download backup"
-msgstr ""
+msgstr "Ladda ner säkerhetskopia"
 
 msgid "Dropbear Instance"
-msgstr ""
+msgstr "Dropbear-instans"
 
 msgid ""
 "Dropbear offers <abbr title=\"Secure Shell\">SSH</abbr> network shell access "
@@ -909,7 +941,7 @@ msgid "Dynamic <abbr title=\"Dynamic Host Configuration Protocol\">DHCP</abbr>"
 msgstr ""
 
 msgid "Dynamic tunnel"
-msgstr ""
+msgstr "Dynamisk tunnel"
 
 msgid ""
 "Dynamically allocate DHCP addresses for clients. If disabled, only clients "
@@ -920,10 +952,10 @@ msgid "EA-bits length"
 msgstr ""
 
 msgid "EAP-Method"
-msgstr ""
+msgstr "EAP-metod"
 
 msgid "Edit"
-msgstr ""
+msgstr "Redigera"
 
 msgid ""
 "Edit the raw configuration data above to fix any error and hit \"Save\" to "
@@ -931,19 +963,19 @@ msgid ""
 msgstr ""
 
 msgid "Edit this interface"
-msgstr ""
+msgstr "Redigera det här gränssnittet"
 
 msgid "Edit this network"
-msgstr ""
+msgstr "Redigera det här nätverket"
 
 msgid "Emergency"
-msgstr ""
+msgstr "Nödsituation"
 
 msgid "Enable"
-msgstr ""
+msgstr "Aktivera"
 
 msgid "Enable <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
-msgstr ""
+msgstr "Aktivera <abbr title=\"Spanning Tree Protocol\">STP</abbr>"
 
 msgid "Enable HE.net dynamic endpoint update"
 msgstr ""
@@ -958,19 +990,22 @@ msgid "Enable Jumbo Frame passthrough"
 msgstr ""
 
 msgid "Enable NTP client"
-msgstr ""
+msgstr "Aktivera NTP-klient"
 
 msgid "Enable Single DES"
 msgstr ""
 
 msgid "Enable TFTP server"
-msgstr ""
+msgstr "Aktivera TFTP-server"
 
 msgid "Enable VLAN functionality"
-msgstr ""
+msgstr "Aktivera VLAN-funktionalitet"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr ""
+msgstr "Aktivera WPS-tryckknapp, kräver WPA(2)-PSK"
+
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr "Kräver ominstallation av nyckel (KRACK) motåtgärder"
 
 msgid "Enable learning and aging"
 msgstr ""
@@ -985,15 +1020,20 @@ msgid "Enable the DF (Don't Fragment) flag of the encapsulating packets."
 msgstr ""
 
 msgid "Enable this mount"
-msgstr ""
+msgstr "Aktivera den här monteringen"
 
 msgid "Enable this swap"
-msgstr ""
+msgstr "Aktivera den här swap"
 
 msgid "Enable/Disable"
-msgstr ""
+msgstr "Aktivera/Inaktivera"
 
 msgid "Enabled"
+msgstr "Aktiverad"
+
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
 msgstr ""
 
 msgid "Enables the Spanning Tree Protocol on this bridge"
@@ -1003,7 +1043,7 @@ msgid "Encapsulation mode"
 msgstr ""
 
 msgid "Encryption"
-msgstr ""
+msgstr "Kryptering"
 
 msgid "Endpoint Host"
 msgstr ""
@@ -1012,34 +1052,40 @@ msgid "Endpoint Port"
 msgstr ""
 
 msgid "Erasing..."
-msgstr ""
+msgstr "Raderar..."
 
 msgid "Error"
-msgstr ""
+msgstr "Fel"
 
 msgid "Errored seconds (ES)"
 msgstr ""
 
 msgid "Ethernet Adapter"
-msgstr ""
+msgstr "Ethernet-adapter"
 
 msgid "Ethernet Switch"
 msgstr ""
 
 msgid "Exclude interfaces"
-msgstr ""
+msgstr "Inkludera inte dessa gränssnitt"
 
 msgid "Expand hosts"
-msgstr ""
+msgstr "Expandera värdar"
 
 msgid "Expires"
-msgstr ""
+msgstr "Löper ut"
 
 msgid ""
 "Expiry time of leased addresses, minimum is 2 minutes (<code>2m</code>)."
 msgstr ""
 
 msgid "External"
+msgstr "Externt"
+
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
 msgstr ""
 
 msgid "External system log server"
@@ -1052,28 +1098,25 @@ msgid "External system log server protocol"
 msgstr ""
 
 msgid "Extra SSH command options"
-msgstr ""
-
-msgid "Fast Frames"
-msgstr ""
+msgstr "Extra alternativ för SSH-kommandot"
 
 msgid "File"
-msgstr ""
+msgstr "Fil"
 
 msgid "Filename of the boot image advertised to clients"
 msgstr ""
 
 msgid "Filesystem"
-msgstr ""
+msgstr "Filsystem"
 
 msgid "Filter"
-msgstr ""
+msgstr "Filtrera"
 
 msgid "Filter private"
-msgstr ""
+msgstr "Filtrera privata"
 
 msgid "Filter useless"
-msgstr ""
+msgstr "Filtrera icke-användbara"
 
 msgid ""
 "Find all currently attached filesystems and swap and replace configuration "
@@ -1081,28 +1124,31 @@ msgid ""
 msgstr ""
 
 msgid "Find and join network"
-msgstr ""
+msgstr "Hitta och anslut till nätverk"
 
 msgid "Find package"
-msgstr ""
+msgstr "Hitta paket"
 
 msgid "Finish"
-msgstr ""
+msgstr "Avsluta"
 
 msgid "Firewall"
+msgstr "Brandvägg"
+
+msgid "Firewall Mark"
 msgstr ""
 
 msgid "Firewall Settings"
-msgstr ""
+msgstr "Inställningar för brandvägg"
 
 msgid "Firewall Status"
-msgstr ""
+msgstr "Status för brandvägg"
 
 msgid "Firmware File"
 msgstr ""
 
 msgid "Firmware Version"
-msgstr ""
+msgstr "Version för inre mjukvara"
 
 msgid "Fixed source port for outbound DNS queries"
 msgstr ""
@@ -1120,31 +1166,34 @@ msgid "Flash operations"
 msgstr ""
 
 msgid "Flashing..."
-msgstr ""
+msgstr "Skriver..."
 
 msgid "Force"
-msgstr ""
+msgstr "Tvinga"
 
 msgid "Force CCMP (AES)"
-msgstr ""
+msgstr "Tvinga CCMP (AES)"
 
 msgid "Force DHCP on this network even if another server is detected."
-msgstr ""
+msgstr "Tvinga DHCP på det här nätverket även om en annan server är upptäckt."
 
 msgid "Force TKIP"
-msgstr ""
+msgstr "Tvinga TKIP"
 
 msgid "Force TKIP and CCMP (AES)"
-msgstr ""
+msgstr "Tvinga TKIP och CCMP (AES)"
+
+msgid "Force link"
+msgstr "Tvinga länk"
 
 msgid "Force use of NAT-T"
-msgstr ""
+msgstr "Tvinga användning av NAT-T"
 
 msgid "Form token mismatch"
 msgstr ""
 
 msgid "Forward DHCP traffic"
-msgstr ""
+msgstr "Vidarebefordra DHCP-trafik"
 
 msgid "Forward Error Correction Seconds (FECS)"
 msgstr ""
@@ -1153,7 +1202,7 @@ msgid "Forward broadcast traffic"
 msgstr ""
 
 msgid "Forwarding mode"
-msgstr ""
+msgstr "Vidarebefordringsläge"
 
 msgid "Fragmentation Threshold"
 msgstr ""
@@ -1162,10 +1211,10 @@ msgid "Frame Bursting"
 msgstr ""
 
 msgid "Free"
-msgstr ""
+msgstr "Fritt"
 
 msgid "Free space"
-msgstr ""
+msgstr "Fritt utrymme"
 
 msgid ""
 "Further information about WireGuard interfaces and peers at <a href=\"http://"
@@ -1173,76 +1222,76 @@ msgid ""
 msgstr ""
 
 msgid "GHz"
-msgstr ""
+msgstr "GHz"
 
 msgid "GPRS only"
-msgstr ""
+msgstr "Endast GPRS"
 
 msgid "Gateway"
-msgstr ""
+msgstr "Gateway"
 
 msgid "Gateway ports"
-msgstr ""
+msgstr "Gateway-portar"
 
 msgid "General Settings"
-msgstr ""
+msgstr "Generella inställningar"
 
 msgid "General Setup"
 msgstr ""
 
 msgid "General options for opkg"
-msgstr ""
+msgstr "Generella alternativ för opkg"
 
 msgid "Generate Config"
-msgstr ""
+msgstr "Generera konfig"
 
 msgid "Generate archive"
-msgstr ""
+msgstr "Generera arkiv"
 
 msgid "Generic 802.11%s Wireless Controller"
 msgstr ""
 
 msgid "Given password confirmation did not match, password not changed!"
-msgstr ""
+msgstr "Angiven lösenordsbekräftelse matchade inte, lösenordet ändrades inte!"
 
 msgid "Global Settings"
-msgstr ""
+msgstr "Globala inställningar"
 
 msgid "Global network options"
-msgstr ""
+msgstr "Globala nätverksalternativ"
 
 msgid "Go to password configuration..."
-msgstr ""
+msgstr "Gå till lösenordskonfiguration..."
 
 msgid "Go to relevant configuration page"
-msgstr ""
+msgstr "Gå till relevant konfigurationssida"
 
 msgid "Group Password"
-msgstr ""
+msgstr "Grupplösenord"
 
 msgid "Guest"
-msgstr ""
+msgstr "Gäst"
 
 msgid "HE.net password"
-msgstr ""
+msgstr "HE.net-lösenord"
 
 msgid "HE.net username"
-msgstr ""
+msgstr "HE.net-användarnamn"
 
 msgid "HT mode (802.11n)"
-msgstr ""
+msgstr "HT-läge (802.11n)"
 
 msgid "Handler"
 msgstr ""
 
 msgid "Hang Up"
-msgstr ""
+msgstr "Lägg på"
 
 msgid "Header Error Code Errors (HEC)"
 msgstr ""
 
 msgid "Heartbeat"
-msgstr ""
+msgstr "Hjärtslag"
 
 msgid ""
 "Here you can configure the basic aspects of your device like its hostname or "
@@ -1258,10 +1307,10 @@ msgid "Hermes 802.11b Wireless Controller"
 msgstr ""
 
 msgid "Hide <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
-msgstr ""
+msgstr "Göm <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"
 
 msgid "Host"
-msgstr ""
+msgstr "Värd"
 
 msgid "Host entries"
 msgstr ""
@@ -1270,43 +1319,43 @@ msgid "Host expiry timeout"
 msgstr ""
 
 msgid "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> or Network"
-msgstr ""
+msgstr "Host-<abbr title=\"Internet Protocol Address\">IP</abbr> eller Nätverk"
 
 msgid "Hostname"
-msgstr ""
+msgstr "Värdnamn"
 
 msgid "Hostname to send when requesting DHCP"
-msgstr ""
+msgstr "Värdnamn att skicka vid DHCP-förfrågningar"
 
 msgid "Hostnames"
-msgstr ""
+msgstr "Värdnamn"
 
 msgid "Hybrid"
-msgstr ""
+msgstr "Hybrid"
 
 msgid "IKE DH Group"
 msgstr ""
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "IP-adresser"
 
 msgid "IP address"
-msgstr ""
+msgstr "IP-adress"
 
 msgid "IPv4"
-msgstr ""
+msgstr "IPv4"
 
 msgid "IPv4 Firewall"
-msgstr ""
+msgstr "IPv4-brandvägg"
 
 msgid "IPv4 WAN Status"
 msgstr ""
 
 msgid "IPv4 address"
-msgstr ""
+msgstr "IPv4-adress"
 
 msgid "IPv4 and IPv6"
-msgstr ""
+msgstr "IPv4 och IPv6"
 
 msgid "IPv4 assignment length"
 msgstr ""
@@ -1315,13 +1364,13 @@ msgid "IPv4 broadcast"
 msgstr ""
 
 msgid "IPv4 gateway"
-msgstr ""
+msgstr "IPv4-gateway"
 
 msgid "IPv4 netmask"
-msgstr ""
+msgstr "IPv4-nätmask"
 
 msgid "IPv4 only"
-msgstr ""
+msgstr "Endast IPv4"
 
 msgid "IPv4 prefix"
 msgstr ""
@@ -1330,22 +1379,22 @@ msgid "IPv4 prefix length"
 msgstr ""
 
 msgid "IPv4-Address"
-msgstr ""
+msgstr "IPv4-Adress"
 
 msgid "IPv4-in-IPv4 (RFC2003)"
-msgstr ""
+msgstr "IPv4-i-IPv4 (RFC2003)"
 
 msgid "IPv6"
-msgstr ""
+msgstr "IPv6"
 
 msgid "IPv6 Firewall"
-msgstr ""
+msgstr "IPv6-brandvägg"
 
 msgid "IPv6 Neighbours"
-msgstr ""
+msgstr "IPV6-grannar"
 
 msgid "IPv6 Settings"
-msgstr ""
+msgstr "IPv6-inställningar"
 
 msgid "IPv6 ULA-Prefix"
 msgstr ""
@@ -1354,7 +1403,7 @@ msgid "IPv6 WAN Status"
 msgstr ""
 
 msgid "IPv6 address"
-msgstr ""
+msgstr "IPv6-adress"
 
 msgid "IPv6 address delegated to the local tunnel endpoint (optional)"
 msgstr ""
@@ -1366,10 +1415,10 @@ msgid "IPv6 assignment length"
 msgstr ""
 
 msgid "IPv6 gateway"
-msgstr ""
+msgstr "IPv6-gateway"
 
 msgid "IPv6 only"
-msgstr ""
+msgstr "Endast IPv6"
 
 msgid "IPv6 prefix"
 msgstr ""
@@ -1380,22 +1429,28 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
+msgstr "IPv6-adress"
+
+msgid "IPv6-PD"
 msgstr ""
 
 msgid "IPv6-in-IPv4 (RFC4213)"
-msgstr ""
+msgstr "IPv6-i-IPv4 (RFC4213)"
 
 msgid "IPv6-over-IPv4 (6rd)"
-msgstr ""
+msgstr "IPv6-över-IPv4 (6rd)"
 
 msgid "IPv6-over-IPv4 (6to4)"
-msgstr ""
+msgstr "IPv6-över-IPv4 (6till4)"
 
 msgid "Identity"
-msgstr ""
+msgstr "Identitet"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1425,19 +1480,19 @@ msgid ""
 msgstr ""
 
 msgid "Ignore <code>/etc/hosts</code>"
-msgstr ""
+msgstr "Ignorera <code>/etc/hosts</code>"
 
 msgid "Ignore interface"
-msgstr ""
+msgstr "Ignorera gränssnitt"
 
 msgid "Ignore resolve file"
-msgstr ""
+msgstr "Ignorera resolv-fil"
 
 msgid "Image"
-msgstr ""
+msgstr "Bild"
 
 msgid "In"
-msgstr ""
+msgstr "I"
 
 msgid ""
 "In order to prevent unauthorized access to the system, your request has been "
@@ -1448,70 +1503,73 @@ msgid "Inactivity timeout"
 msgstr ""
 
 msgid "Inbound:"
-msgstr ""
+msgstr "Ankommande"
 
 msgid "Info"
-msgstr ""
+msgstr "Info"
 
 msgid "Initscript"
-msgstr ""
+msgstr "Initskript"
 
 msgid "Initscripts"
-msgstr ""
+msgstr "Initskripten"
 
 msgid "Install"
-msgstr ""
+msgstr "Installera"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
-msgstr ""
+msgstr "Installera iputils-traceroute6 för IPv6-traceroute"
 
 msgid "Install package %q"
-msgstr ""
+msgstr "Installera paketet %q"
 
 msgid "Install protocol extensions..."
-msgstr ""
+msgstr "Installera protokoll-förlängningar..."
 
 msgid "Installed packages"
-msgstr ""
+msgstr "Installerade paket"
 
 msgid "Interface"
+msgstr "Gränssnitt"
+
+msgid "Interface %q device auto-migrated from %q to %q."
 msgstr ""
 
 msgid "Interface Configuration"
-msgstr ""
+msgstr "Konfiguration av gränssnitt"
 
 msgid "Interface Overview"
-msgstr ""
+msgstr "Överblick av gränssnitt"
 
 msgid "Interface is reconnecting..."
-msgstr ""
+msgstr "Gränssnittet återansluter..."
 
 msgid "Interface is shutting down..."
-msgstr ""
+msgstr "Gränssnittet stänger ner..."
 
 msgid "Interface name"
-msgstr ""
+msgstr "Gränssnittets namn"
 
 msgid "Interface not present or not connected yet."
-msgstr ""
+msgstr "Gränssnittet är inte närvarande eller är inte anslutet än."
 
 msgid "Interface reconnected"
-msgstr ""
+msgstr "Gränssnittet återanslöt"
 
 msgid "Interface shut down"
-msgstr ""
+msgstr "Gränssnittet stängdes ner"
 
 msgid "Interfaces"
-msgstr ""
+msgstr "Gränssnitten"
 
 msgid "Internal"
-msgstr ""
+msgstr "Interna"
 
 msgid "Internal Server Error"
-msgstr ""
+msgstr "Internt server-fel"
 
 msgid "Invalid"
-msgstr ""
+msgstr "Ogiltig"
 
 msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed."
 msgstr ""
@@ -1520,48 +1578,51 @@ msgid "Invalid VLAN ID given! Only unique IDs are allowed"
 msgstr ""
 
 msgid "Invalid username and/or password! Please try again."
-msgstr ""
+msgstr "Ogiltigt användarnamn och/eller lösenord! Vänligen försök igen."
+
+msgid "Isolate Clients"
+msgstr "Isolera klienter"
 
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
-msgstr ""
+msgid "JavaScript required!"
+msgstr "JavaScript krävs!"
 
 msgid "Join Network"
-msgstr ""
+msgstr "Anslut till nätverk"
 
 msgid "Join Network: Wireless Scan"
-msgstr ""
+msgstr "Anslut till nätverk: Trådlös skanning"
 
 msgid "Joining Network: %q"
-msgstr ""
+msgstr "Ansluter till nätverk: %q"
 
 msgid "Keep settings"
-msgstr ""
+msgstr "Behåll inställningar"
 
 msgid "Kernel Log"
-msgstr ""
+msgstr "Kernel-logg"
 
 msgid "Kernel Version"
-msgstr ""
+msgstr "Kernel-version"
 
 msgid "Key"
-msgstr ""
+msgstr "Nyckel"
 
 msgid "Key #%d"
-msgstr ""
+msgstr "Nyckel #%d"
 
 msgid "Kill"
-msgstr ""
+msgstr "Döda"
 
 msgid "L2TP"
-msgstr ""
+msgstr "L2TP"
 
 msgid "L2TP Server"
-msgstr ""
+msgstr "L2TP-server"
 
 msgid "LCP echo failure threshold"
 msgstr ""
@@ -1570,49 +1631,46 @@ msgid "LCP echo interval"
 msgstr ""
 
 msgid "LLC"
-msgstr ""
+msgstr "LLC"
 
 msgid "Label"
-msgstr ""
+msgstr "Märke"
 
 msgid "Language"
-msgstr ""
+msgstr "Språk"
 
 msgid "Language and Style"
-msgstr ""
+msgstr "Språk och Stil"
 
 msgid "Latency"
-msgstr ""
+msgstr "Latens"
 
 msgid "Leaf"
-msgstr ""
+msgstr "Löv"
 
 msgid "Lease time"
-msgstr ""
+msgstr "Kontraktstid"
 
 msgid "Lease validity time"
-msgstr ""
+msgstr "Giltighetstid för kontrakt"
 
 msgid "Leasefile"
-msgstr ""
-
-msgid "Leasetime"
-msgstr ""
+msgstr "Kontraktsfil"
 
 msgid "Leasetime remaining"
-msgstr ""
+msgstr "Återstående kontraktstid"
 
 msgid "Leave empty to autodetect"
-msgstr ""
+msgstr "Lämna tom för att upptäcka automatiskt"
 
 msgid "Leave empty to use the current WAN address"
-msgstr ""
+msgstr "Lämna tom för att använda den nuvarande WAN-adressen"
 
 msgid "Legend:"
 msgstr ""
 
 msgid "Limit"
-msgstr ""
+msgstr "Begränsa"
 
 msgid "Limit DNS service to subnets interfaces on which we are serving DNS."
 msgstr ""
@@ -1633,16 +1691,32 @@ msgid "Line Uptime"
 msgstr ""
 
 msgid "Link On"
-msgstr ""
+msgstr "Länk På"
 
 msgid ""
 "List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
 "requests to"
 msgstr ""
 
-msgid "List of SSH key files for auth"
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
 msgstr ""
 
+msgid "List of SSH key files for auth"
+msgstr "Lista över SSH-nyckelfiler för auth"
+
 msgid "List of domains to allow RFC1918 responses for"
 msgstr ""
 
@@ -1653,43 +1727,44 @@ msgid "Listen Interfaces"
 msgstr ""
 
 msgid "Listen Port"
-msgstr ""
+msgstr "Lyssningsportar"
 
 msgid "Listen only on the given interface or, if unspecified, on all"
 msgstr ""
+"Lyssna endast på det angivna gränssnittet eller, om o-specificerat på alla"
 
 msgid "Listening port for inbound DNS queries"
-msgstr ""
+msgstr "Lyssningsportar för ankommande DNS-förfrågningar"
 
 msgid "Load"
-msgstr ""
+msgstr "Belastning"
 
 msgid "Load Average"
-msgstr ""
+msgstr "Snitt-belastning"
 
 msgid "Loading"
-msgstr ""
+msgstr "Laddar"
 
 msgid "Local IP address to assign"
 msgstr ""
 
 msgid "Local IPv4 address"
-msgstr ""
+msgstr "Lokal IPv4-adress"
 
 msgid "Local IPv6 address"
-msgstr ""
+msgstr "Lokal IPv6-adress"
 
 msgid "Local Service Only"
-msgstr ""
+msgstr "Enbart lokal tjänst"
 
 msgid "Local Startup"
-msgstr ""
+msgstr "Lokal uppstart"
 
 msgid "Local Time"
-msgstr ""
+msgstr "Lokal tid"
 
 msgid "Local domain"
-msgstr ""
+msgstr "Lokal domän"
 
 msgid ""
 "Local domain specification. Names matching this domain are never forwarded "
@@ -1700,7 +1775,7 @@ msgid "Local domain suffix appended to DHCP names and hosts file entries"
 msgstr ""
 
 msgid "Local server"
-msgstr ""
+msgstr "Lokal server"
 
 msgid ""
 "Localise hostname depending on the requesting subnet if multiple IPs are "
@@ -1708,10 +1783,10 @@ msgid ""
 msgstr ""
 
 msgid "Localise queries"
-msgstr ""
+msgstr "Lokalisera förfrågningar"
 
 msgid "Locked to channel %s used by: %s"
-msgstr ""
+msgstr "Låst till kanalen %s som används av: %s"
 
 msgid "Log output level"
 msgstr ""
@@ -1723,10 +1798,10 @@ msgid "Logging"
 msgstr ""
 
 msgid "Login"
-msgstr ""
+msgstr "Logga in"
 
 msgid "Logout"
-msgstr ""
+msgstr "Logga ut"
 
 msgid "Loss of Signal Seconds (LOSS)"
 msgstr ""
@@ -1735,31 +1810,31 @@ msgid "Lowest leased address as offset from the network address."
 msgstr ""
 
 msgid "MAC-Address"
-msgstr ""
+msgstr "MAC-adress"
 
 msgid "MAC-Address Filter"
-msgstr ""
+msgstr "Filter för MAC-adress"
 
 msgid "MAC-Filter"
-msgstr ""
+msgstr "MAC-filter"
 
 msgid "MAC-List"
-msgstr ""
+msgstr "MAC-lista"
 
 msgid "MAP / LW4over6"
-msgstr ""
+msgstr "MAP / LW4över6"
 
 msgid "MB/s"
-msgstr ""
+msgstr "MB/s"
 
 msgid "MD5"
-msgstr ""
+msgstr "MD5"
 
 msgid "MHz"
-msgstr ""
+msgstr "MHz"
 
 msgid "MTU"
-msgstr ""
+msgstr "MTU"
 
 msgid ""
 "Make sure to clone the root filesystem using something like the commands "
@@ -1767,14 +1842,11 @@ msgid ""
 msgstr ""
 
 msgid "Manual"
-msgstr ""
+msgstr "Manuell"
 
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1799,19 +1871,16 @@ msgid "Maximum number of leased addresses."
 msgstr ""
 
 msgid "Mbit/s"
-msgstr ""
+msgstr "Mbit/s"
 
 msgid "Memory"
-msgstr ""
+msgstr "Minne"
 
 msgid "Memory usage (%)"
-msgstr ""
+msgstr "Minnesanvändning (%)"
 
 msgid "Metric"
-msgstr ""
-
-msgid "Minimum Rate"
-msgstr ""
+msgstr "Metrisk"
 
 msgid "Minimum hold time"
 msgstr ""
@@ -1825,29 +1894,32 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
-msgid "Mode"
+msgid "Mobility Domain"
 msgstr ""
 
+msgid "Mode"
+msgstr "Läge"
+
 msgid "Model"
-msgstr ""
+msgstr "Modell"
 
 msgid "Modem device"
-msgstr ""
+msgstr "Modem-enhet"
 
 msgid "Modem init timeout"
 msgstr ""
 
 msgid "Monitor"
-msgstr ""
+msgstr "Övervaka"
 
 msgid "Mount Entry"
 msgstr ""
 
 msgid "Mount Point"
-msgstr ""
+msgstr "Monteringspunkt"
 
 msgid "Mount Points"
-msgstr ""
+msgstr "Monteringspunkter"
 
 msgid "Mount Points - Mount Entry"
 msgstr ""
@@ -1864,124 +1936,124 @@ msgid "Mount filesystems not specifically configured"
 msgstr ""
 
 msgid "Mount options"
-msgstr ""
+msgstr "Monteringsalternativ"
 
 msgid "Mount point"
-msgstr ""
+msgstr "Monteringspunkt"
 
 msgid "Mount swap not specifically configured"
 msgstr ""
 
 msgid "Mounted file systems"
-msgstr ""
+msgstr "Monterade filsystem"
 
 msgid "Move down"
-msgstr ""
+msgstr "Flytta ner"
 
 msgid "Move up"
-msgstr ""
-
-msgid "Multicast Rate"
-msgstr ""
+msgstr "Flytta upp"
 
 msgid "Multicast address"
 msgstr ""
 
 msgid "NAS ID"
-msgstr ""
+msgstr "NAS-ID"
 
 msgid "NAT-T Mode"
-msgstr ""
+msgstr "NAT-T-läge"
 
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr "NCM"
+
 msgid "NDP-Proxy"
 msgstr ""
 
 msgid "NT Domain"
-msgstr ""
+msgstr "NT-domän"
 
 msgid "NTP server candidates"
-msgstr ""
+msgstr "NTP-serverkandidater"
 
 msgid "NTP sync time-out"
 msgstr ""
 
 msgid "Name"
-msgstr ""
+msgstr "Namn"
 
 msgid "Name of the new interface"
-msgstr ""
+msgstr "Namn på det nya gränssnittet"
 
 msgid "Name of the new network"
-msgstr ""
+msgstr "Namnet på det nya nätverket"
 
 msgid "Navigation"
-msgstr ""
+msgstr "Navigering"
 
 msgid "Netmask"
-msgstr ""
+msgstr "Nätmask"
 
 msgid "Network"
-msgstr ""
+msgstr "Nätverk"
 
 msgid "Network Utilities"
-msgstr ""
+msgstr "Nätverksverktyg"
 
 msgid "Network boot image"
-msgstr ""
+msgstr "Uppstartsbild för nätverket"
 
 msgid "Network without interfaces."
-msgstr ""
+msgstr "Nätverk utan gränssnitt"
 
 msgid "Next »"
-msgstr ""
+msgstr "Nästa »"
 
 msgid "No DHCP Server configured for this interface"
-msgstr ""
+msgstr "Det finns ingen DHCP-server inställd för det här gränssnittet"
 
 msgid "No NAT-T"
-msgstr ""
+msgstr "Ingen NAT-T"
 
 msgid "No chains in this table"
-msgstr ""
+msgstr "Inga kedjor i den här tabellen"
 
 msgid "No files found"
-msgstr ""
+msgstr "Inga filer hittades"
 
 msgid "No information available"
-msgstr ""
+msgstr "Ingen information tillgänglig"
 
 msgid "No negative cache"
-msgstr ""
+msgstr "Ingen negativ cache"
 
 msgid "No network configured on this device"
-msgstr ""
+msgstr "Det finns inget nätverk inställt på den här enheten"
 
 msgid "No network name specified"
-msgstr ""
+msgstr "Inget nätverksnamn angavs"
 
 msgid "No package lists available"
-msgstr ""
+msgstr "Ingen paketlista tillgänglig"
 
 msgid "No password set!"
-msgstr ""
+msgstr "Inget lösenord inställt!"
 
 msgid "No rules in this chain"
-msgstr ""
+msgstr "Inga regler i den här kedjan"
 
 msgid "No zone assigned"
 msgstr ""
 
 msgid "Noise"
-msgstr ""
+msgstr "Buller"
 
 msgid "Noise Margin (SNR)"
 msgstr ""
 
 msgid "Noise:"
-msgstr ""
+msgstr "Buller:"
 
 msgid "Non Pre-emtive CRC errors (CRC_P)"
 msgstr ""
@@ -1990,34 +2062,34 @@ msgid "Non-wildcard"
 msgstr ""
 
 msgid "None"
-msgstr ""
+msgstr "Ingen"
 
 msgid "Normal"
-msgstr ""
+msgstr "Normal"
 
 msgid "Not Found"
-msgstr ""
+msgstr "Hittades inte"
 
 msgid "Not associated"
-msgstr ""
+msgstr "Inte associerad"
 
 msgid "Not connected"
-msgstr ""
+msgstr "Inte ansluten"
 
 msgid "Note: Configuration files will be erased."
-msgstr ""
+msgstr "Notera: Konfigurationsfiler kommer att raderas."
 
 msgid "Note: interface name length"
-msgstr ""
+msgstr "Notera: längden på gränssnittets namn"
 
 msgid "Notice"
-msgstr ""
+msgstr "Avisering"
 
 msgid "Nslookup"
-msgstr ""
+msgstr "Nslookup"
 
 msgid "OK"
-msgstr ""
+msgstr "OK"
 
 msgid "OPKG-Configuration"
 msgstr ""
@@ -2044,31 +2116,34 @@ msgid "On-State Delay"
 msgstr ""
 
 msgid "One of hostname or mac address must be specified!"
-msgstr ""
+msgstr "En utav värdnamn eller MAC-adress måste anges!"
 
 msgid "One or more fields contain invalid values!"
-msgstr ""
+msgstr "En eller fler fält innehåller ogiltiga värden!"
 
 msgid "One or more invalid/required values on tab"
 msgstr ""
 
 msgid "One or more required fields have no value!"
-msgstr ""
+msgstr "En eller fler fält som krävs har inget värde!"
 
 msgid "Open list..."
-msgstr ""
+msgstr "Öppna lista..."
 
 msgid "OpenConnect (CISCO AnyConnect)"
-msgstr ""
+msgstr "OpenConnect (CISCO AnyConnect)"
 
 msgid "Operating frequency"
 msgstr ""
 
 msgid "Option changed"
-msgstr ""
+msgstr "Alternativet ändrades"
 
 msgid "Option removed"
-msgstr ""
+msgstr "Alternativet togs bort"
+
+msgid "Optional"
+msgstr "Valfri"
 
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
@@ -2076,12 +2151,21 @@ msgstr ""
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2107,19 +2191,16 @@ msgid "Optional. UDP port used for outgoing and incoming packets."
 msgstr ""
 
 msgid "Options"
-msgstr ""
+msgstr "Alternativ"
 
 msgid "Other:"
-msgstr ""
+msgstr "Andra:"
 
 msgid "Out"
-msgstr ""
+msgstr "Ut"
 
 msgid "Outbound:"
-msgstr ""
-
-msgid "Outdoor Channels"
-msgstr ""
+msgstr "Utgående"
 
 msgid "Output Interface"
 msgstr ""
@@ -2151,40 +2232,43 @@ msgid "Override the table used for internal routes"
 msgstr ""
 
 msgid "Overview"
-msgstr ""
+msgstr "Överblick"
 
 msgid "Owner"
-msgstr ""
+msgstr "Ägare"
 
 msgid "PAP/CHAP password"
-msgstr ""
+msgstr "PAP/CHAP-lösenord"
 
 msgid "PAP/CHAP username"
-msgstr ""
+msgstr "PAP/CHAP-användarnamn"
 
 msgid "PID"
-msgstr ""
+msgstr "PID"
 
 msgid "PIN"
+msgstr "PIN-kod"
+
+msgid "PMK R1 Push"
 msgstr ""
 
 msgid "PPP"
-msgstr ""
+msgstr "PPP"
 
 msgid "PPPoA Encapsulation"
 msgstr ""
 
 msgid "PPPoATM"
-msgstr ""
+msgstr "PPPoATM"
 
 msgid "PPPoE"
-msgstr ""
+msgstr "PPPoE"
 
 msgid "PPPoSSH"
-msgstr ""
+msgstr "PPPoSSH"
 
 msgid "PPtP"
-msgstr ""
+msgstr "PPtP"
 
 msgid "PSID offset"
 msgstr ""
@@ -2196,55 +2280,58 @@ msgid "PTM/EFM (Packet Transfer Mode)"
 msgstr ""
 
 msgid "Package libiwinfo required!"
-msgstr ""
+msgstr "Paketet libiwinfo krävs!"
 
 msgid "Package lists are older than 24 hours"
-msgstr ""
+msgstr "Paket-listor är äldre än 24 timmar"
 
 msgid "Package name"
-msgstr ""
+msgstr "Paketnamn"
 
 msgid "Packets"
-msgstr ""
+msgstr "Paket"
 
 msgid "Part of zone %q"
-msgstr ""
+msgstr "Del av zon %q"
 
 msgid "Password"
-msgstr ""
+msgstr "Lösenord"
 
 msgid "Password authentication"
-msgstr ""
+msgstr "Lösenordsautentisering"
 
 msgid "Password of Private Key"
-msgstr ""
+msgstr "Den privata nyckelns lösenord"
 
 msgid "Password of inner Private Key"
-msgstr ""
+msgstr "Lösenordet för den inre privata nyckeln"
 
 msgid "Password successfully changed!"
-msgstr ""
+msgstr "Ändring av lösenordet lyckades!"
+
+msgid "Password2"
+msgstr "Lösenord2"
 
 msgid "Path to CA-Certificate"
-msgstr ""
+msgstr "Genväg till CA-certifikat"
 
 msgid "Path to Client-Certificate"
-msgstr ""
+msgstr "Genväg till klient-certifikat"
 
 msgid "Path to Private Key"
-msgstr ""
+msgstr "Genväg till privat nyckel"
 
 msgid "Path to executable which handles the button event"
 msgstr ""
 
 msgid "Path to inner CA-Certificate"
-msgstr ""
+msgstr "Genväg till det inre CA-certifikatet"
 
 msgid "Path to inner Client-Certificate"
-msgstr ""
+msgstr "Genväg till det inre klient-certifikatet"
 
 msgid "Path to inner Private Key"
-msgstr ""
+msgstr "Genväg till den inre privata nyckeln"
 
 msgid "Peak:"
 msgstr ""
@@ -2259,10 +2346,10 @@ msgid "Perfect Forward Secrecy"
 msgstr ""
 
 msgid "Perform reboot"
-msgstr ""
+msgstr "Utför omstart"
 
 msgid "Perform reset"
-msgstr ""
+msgstr "Utför återställning"
 
 msgid "Persistent Keep Alive"
 msgstr ""
@@ -2271,25 +2358,25 @@ msgid "Phy Rate:"
 msgstr ""
 
 msgid "Physical Settings"
-msgstr ""
+msgstr "Fysiska inställningar"
 
 msgid "Ping"
-msgstr ""
+msgstr "Ping"
 
 msgid "Pkts."
-msgstr ""
+msgstr "Pkt."
 
 msgid "Please enter your username and password."
-msgstr ""
+msgstr "Vänligen ange ditt användarnamn och lösenord."
 
 msgid "Policy"
 msgstr ""
 
 msgid "Port"
-msgstr ""
+msgstr "Port"
 
 msgid "Port status:"
-msgstr ""
+msgstr "Port-status:"
 
 msgid "Power Management Mode"
 msgstr ""
@@ -2297,6 +2384,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr "Föredra LTE"
+
+msgid "Prefer UMTS"
+msgstr "Föredra UMTS"
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2306,40 +2402,40 @@ msgid ""
 msgstr ""
 
 msgid "Prevent listening on these interfaces."
-msgstr ""
+msgstr "Förhindra lyssning på dessa gränssnitt."
 
 msgid "Prevents client-to-client communication"
-msgstr ""
+msgstr "Förhindrar kommunikation klient-till-klient"
 
 msgid "Prism2/2.5/3 802.11b Wireless Controller"
 msgstr ""
 
 msgid "Private Key"
-msgstr ""
+msgstr "Privat nyckel"
 
 msgid "Proceed"
-msgstr ""
+msgstr "Fortsätt"
 
 msgid "Processes"
-msgstr ""
+msgstr "Processer"
 
 msgid "Profile"
-msgstr ""
+msgstr "Profil"
 
 msgid "Prot."
-msgstr ""
+msgstr "Prot."
 
 msgid "Protocol"
-msgstr ""
+msgstr "Protokoll"
 
 msgid "Protocol family"
-msgstr ""
+msgstr "Protokoll-familj"
 
 msgid "Protocol of the new interface"
-msgstr ""
+msgstr "Det nya gränssnittets protokoll"
 
 msgid "Protocol support is not installed"
-msgstr ""
+msgstr "Stöd för protokoll är inte installerat"
 
 msgid "Provide NTP server"
 msgstr ""
@@ -2351,15 +2447,21 @@ msgid "Pseudo Ad-Hoc (ahdemo)"
 msgstr ""
 
 msgid "Public Key"
-msgstr ""
+msgstr "Publik nyckel"
 
 msgid "Public prefix routed to this device for distribution to clients."
 msgstr ""
 
 msgid "QMI Cellular"
-msgstr ""
+msgstr "QMI-telefoni"
 
 msgid "Quality"
+msgstr "Kvalité"
+
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
 msgstr ""
 
 msgid "RFC3947 NAT-T mode"
@@ -2369,10 +2471,10 @@ msgid "RTS/CTS Threshold"
 msgstr ""
 
 msgid "RX"
-msgstr ""
+msgstr "RT"
 
 msgid "RX Rate"
-msgstr ""
+msgstr "RX-hastighet"
 
 msgid "RaLink 802.11%s Wireless Controller"
 msgstr ""
@@ -2399,6 +2501,8 @@ msgid ""
 "Read <code>/etc/ethers</code> to configure the <abbr title=\"Dynamic Host "
 "Configuration Protocol\">DHCP</abbr>-Server"
 msgstr ""
+"Läs <code>/etc/ethers</code> för att ställa in <abbr title=\"Dynamic Host "
+"Configuration Protocol\">DHCP</abbr>-servern"
 
 msgid ""
 "Really delete this interface? The deletion cannot be undone!\\nYou might "
@@ -2411,7 +2515,7 @@ msgid ""
 msgstr ""
 
 msgid "Really reset all changes?"
-msgstr ""
+msgstr "Verkligen återställa alla ändringar?"
 
 msgid ""
 "Really shut down network?\\nYou might lose access to this device if you are "
@@ -2424,67 +2528,67 @@ msgid ""
 msgstr ""
 
 msgid "Really switch protocol?"
-msgstr ""
+msgstr "Verkligen byta protokoll?"
 
 msgid "Realtime Connections"
-msgstr ""
+msgstr "Anslutningar i realtid"
 
 msgid "Realtime Graphs"
-msgstr ""
+msgstr "Realtidsgrafer"
 
 msgid "Realtime Load"
 msgstr ""
 
 msgid "Realtime Traffic"
-msgstr ""
+msgstr "Trafik i realtid"
 
 msgid "Realtime Wireless"
+msgstr "Trådlöst i realtid"
+
+msgid "Reassociation Deadline"
 msgstr ""
 
 msgid "Rebind protection"
 msgstr ""
 
 msgid "Reboot"
-msgstr ""
+msgstr "Starta om"
 
 msgid "Rebooting..."
-msgstr ""
+msgstr "Startar om..."
 
 msgid "Reboots the operating system of your device"
-msgstr ""
+msgstr "Startar om din enhets operativsystem"
 
 msgid "Receive"
-msgstr ""
+msgstr "Ta emot"
 
 msgid "Receiver Antenna"
-msgstr ""
+msgstr "Mottagningsantenn"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
-msgstr ""
+msgstr "Rekommenderad. WireGuard-gränssnittets IP-adress"
 
 msgid "Reconnect this interface"
-msgstr ""
+msgstr "Återanslut det här gränssnittet"
 
 msgid "Reconnecting interface"
-msgstr ""
+msgstr "Återansluter gränssnittet"
 
 msgid "References"
-msgstr ""
-
-msgid "Regulatory Domain"
-msgstr ""
+msgstr "Referens"
 
 msgid "Relay"
-msgstr ""
+msgstr "Relä"
 
 msgid "Relay Bridge"
-msgstr ""
+msgstr "Relä-brygga"
 
 msgid "Relay between networks"
-msgstr ""
+msgstr "Relä mellan nätverk"
 
 msgid "Relay bridge"
-msgstr ""
+msgstr "Relä-brygga"
 
 msgid "Remote IPv4 address"
 msgstr ""
@@ -2493,16 +2597,16 @@ msgid "Remote IPv4 address or FQDN"
 msgstr ""
 
 msgid "Remove"
-msgstr ""
+msgstr "Ta bort"
 
 msgid "Repeat scan"
-msgstr ""
+msgstr "Repetera skanning"
 
 msgid "Replace entry"
 msgstr ""
 
 msgid "Replace wireless configuration"
-msgstr ""
+msgstr "Ersätt trådlös konfiguration"
 
 msgid "Request IPv6-address"
 msgstr ""
@@ -2511,7 +2615,10 @@ msgid "Request IPv6-prefix of length"
 msgstr ""
 
 msgid "Require TLS"
-msgstr ""
+msgstr "Kräv TLS"
+
+msgid "Required"
+msgstr "Krävs!"
 
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
@@ -2519,13 +2626,18 @@ msgstr ""
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2534,49 +2646,49 @@ msgid ""
 msgstr ""
 
 msgid "Reset"
-msgstr ""
+msgstr "Återställ"
 
 msgid "Reset Counters"
-msgstr ""
+msgstr "Återställ räknare"
 
 msgid "Reset to defaults"
-msgstr ""
+msgstr "Återställ till standard"
 
 msgid "Resolv and Hosts Files"
-msgstr ""
+msgstr "Resolv och Värd-filer"
 
 msgid "Resolve file"
-msgstr ""
+msgstr "Resolv-fil"
 
 msgid "Restart"
-msgstr ""
+msgstr "Starta om"
 
 msgid "Restart Firewall"
-msgstr ""
+msgstr "Starta om brandvägg"
 
 msgid "Restore backup"
-msgstr ""
+msgstr "Återställ säkerhetskopian"
 
 msgid "Reveal/hide password"
-msgstr ""
+msgstr "Visa/göm lösenord"
 
 msgid "Revert"
-msgstr ""
+msgstr "Återgå"
 
 msgid "Root"
-msgstr ""
+msgstr "Root"
 
 msgid "Root directory for files served via TFTP"
-msgstr ""
+msgstr "Root-mappen för filer som skickas via TFTP"
 
 msgid "Root preparation"
-msgstr ""
+msgstr "Root-förberedelse"
 
 msgid "Route Allowed IPs"
 msgstr ""
 
 msgid "Route type"
-msgstr ""
+msgstr "Typ av rutt"
 
 msgid "Routed IPv6 prefix for downstream interfaces"
 msgstr ""
@@ -2585,10 +2697,10 @@ msgid "Router Advertisement-Service"
 msgstr ""
 
 msgid "Router Password"
-msgstr ""
+msgstr "Router-lösenord"
 
 msgid "Routes"
-msgstr ""
+msgstr "Rutter"
 
 msgid ""
 "Routes specify over which interface and gateway a certain host or network "
@@ -2596,13 +2708,13 @@ msgid ""
 msgstr ""
 
 msgid "Run a filesystem check before mounting the device"
-msgstr ""
+msgstr "Kör en filsystemskontroll innan enheten monteras"
 
 msgid "Run filesystem check"
-msgstr ""
+msgstr "Kör filsystemskontrollen"
 
 msgid "SHA256"
-msgstr ""
+msgstr "SHA256"
 
 msgid ""
 "SIXXS supports TIC only, for static tunnels using IP protocol 41 (RFC4213) "
@@ -2613,46 +2725,46 @@ msgid "SIXXS-handle[/Tunnel-ID]"
 msgstr ""
 
 msgid "SNR"
-msgstr ""
+msgstr "SNR"
 
 msgid "SSH Access"
-msgstr ""
+msgstr "SSH-åtkomst"
 
 msgid "SSH server address"
-msgstr ""
+msgstr "SSH-serverns adress"
 
 msgid "SSH server port"
-msgstr ""
+msgstr "SSH-serverns port"
 
 msgid "SSH username"
-msgstr ""
+msgstr "Användarnamn för SSH"
 
 msgid "SSH-Keys"
-msgstr ""
+msgstr "SSH-nycklar"
 
 msgid "SSID"
-msgstr ""
+msgstr "SSID"
 
 msgid "Save"
-msgstr ""
+msgstr "Spara"
 
 msgid "Save & Apply"
-msgstr ""
+msgstr "Spara och Verkställ"
 
 msgid "Save &#38; Apply"
-msgstr ""
+msgstr "Spara &#38; Verkställ"
 
 msgid "Scan"
-msgstr ""
+msgstr "Skanna"
 
 msgid "Scheduled Tasks"
-msgstr ""
+msgstr "Schemalagda uppgifter"
 
 msgid "Section added"
-msgstr ""
+msgstr "Sektionen lades till"
 
 msgid "Section removed"
-msgstr ""
+msgstr "Sektionen togs bort"
 
 msgid "See \"mount\" manpage for details"
 msgstr ""
@@ -2663,16 +2775,13 @@ msgid ""
 msgstr ""
 
 msgid "Separate Clients"
-msgstr ""
-
-msgid "Separate WDS"
-msgstr ""
+msgstr "Separera klienter"
 
 msgid "Server Settings"
-msgstr ""
+msgstr "Inställningar för server"
 
 msgid "Server password"
-msgstr ""
+msgstr "Lösenordet för servern"
 
 msgid ""
 "Server password, enter the specific password of the tunnel when the username "
@@ -2680,22 +2789,27 @@ msgid ""
 msgstr ""
 
 msgid "Server username"
-msgstr ""
+msgstr "Användarnamnet för servern"
 
 msgid "Service Name"
-msgstr ""
+msgstr "Namn på tjänst"
 
 msgid "Service Type"
-msgstr ""
+msgstr "Typ av tjänst"
 
 msgid "Services"
+msgstr "Tjänster"
+
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
 msgstr ""
 
 msgid "Set up Time Synchronization"
-msgstr ""
+msgstr "Ställ in Tidssynkronisering"
 
 msgid "Setup DHCP Server"
-msgstr ""
+msgstr "Ställ in DHCP-server"
 
 msgid "Severely Errored Seconds (SES)"
 msgstr ""
@@ -2707,52 +2821,52 @@ msgid "Show current backup file list"
 msgstr ""
 
 msgid "Shutdown this interface"
-msgstr ""
+msgstr "Stäng ner det här gränssnittet"
 
 msgid "Shutdown this network"
-msgstr ""
+msgstr "Stäng ner det här nätverket"
 
 msgid "Signal"
-msgstr ""
+msgstr "Signal"
 
 msgid "Signal Attenuation (SATN)"
 msgstr ""
 
 msgid "Signal:"
-msgstr ""
+msgstr "Signal:"
 
 msgid "Size"
-msgstr ""
+msgstr "Storlek"
 
 msgid "Size (.ipk)"
-msgstr ""
+msgstr "Storlek (.ipk)"
 
 msgid "Skip"
-msgstr ""
+msgstr "Hoppa över"
 
 msgid "Skip to content"
-msgstr ""
+msgstr "Hoppa över till innehåll"
 
 msgid "Skip to navigation"
-msgstr ""
+msgstr "Hoppa över till navigering"
 
 msgid "Slot time"
 msgstr ""
 
 msgid "Software"
-msgstr ""
+msgstr "Mjukvara"
 
 msgid "Software VLAN"
 msgstr ""
 
 msgid "Some fields are invalid, cannot save values!"
-msgstr ""
+msgstr "Några fält är ogiltiga, kan inte spara värden!"
 
 msgid "Sorry, the object you requested was not found."
-msgstr ""
+msgstr "Tyvärr, objektet som du frågade efter kunde inte hittas."
 
 msgid "Sorry, the server encountered an unexpected error."
-msgstr ""
+msgstr "Tyvärr, servern stötte på ett oväntat fel."
 
 msgid ""
 "Sorry, there is no sysupgrade support present; a new firmware image must be "
@@ -2761,10 +2875,10 @@ msgid ""
 msgstr ""
 
 msgid "Sort"
-msgstr ""
+msgstr "Sortera"
 
 msgid "Source"
-msgstr ""
+msgstr "Källa"
 
 msgid "Source routing"
 msgstr ""
@@ -2776,7 +2890,7 @@ msgid "Specifies the directory the device is attached to"
 msgstr ""
 
 msgid "Specifies the listening port of this <em>Dropbear</em> instance"
-msgstr ""
+msgstr "Anger lyssningsporten för den här <em>Dropbear</em>-instansen"
 
 msgid ""
 "Specifies the maximum amount of failed ARP requests until hosts are presumed "
@@ -2789,7 +2903,7 @@ msgid ""
 msgstr ""
 
 msgid "Specify a TOS (Type of Service)."
-msgstr ""
+msgstr "Ange en TaT (Typ av Tjänst)."
 
 msgid ""
 "Specify a TTL (Time to Live) for the encapsulating packet other than the "
@@ -2802,7 +2916,7 @@ msgid ""
 msgstr ""
 
 msgid "Specify the secret encryption key here."
-msgstr ""
+msgstr "Ange den hemliga krypteringsnyckeln här."
 
 msgid "Start"
 msgstr ""
@@ -2814,22 +2928,19 @@ msgid "Startup"
 msgstr ""
 
 msgid "Static IPv4 Routes"
-msgstr ""
+msgstr "Statiska IPv4-rutter"
 
 msgid "Static IPv6 Routes"
-msgstr ""
+msgstr "Statiska IPv6-rutter"
 
 msgid "Static Leases"
 msgstr ""
 
 msgid "Static Routes"
-msgstr ""
-
-msgid "Static WDS"
-msgstr ""
+msgstr "Statiska rutter"
 
 msgid "Static address"
-msgstr ""
+msgstr "Statiska adresser"
 
 msgid ""
 "Static leases are used to assign fixed IP addresses and symbolic hostnames "
@@ -2838,16 +2949,16 @@ msgid ""
 msgstr ""
 
 msgid "Status"
-msgstr ""
+msgstr "Status"
 
 msgid "Stop"
 msgstr ""
 
 msgid "Strict order"
-msgstr ""
+msgstr "Strikt sortering"
 
 msgid "Submit"
-msgstr ""
+msgstr "Skicka in"
 
 msgid "Suppress logging"
 msgstr ""
@@ -2856,71 +2967,71 @@ msgid "Suppress logging of the routine operation of these protocols"
 msgstr ""
 
 msgid "Swap"
-msgstr ""
+msgstr "Swap"
 
 msgid "Swap Entry"
 msgstr ""
 
 msgid "Switch"
-msgstr ""
+msgstr "Byt"
 
 msgid "Switch %q"
-msgstr ""
+msgstr "Byt %q"
 
 msgid "Switch %q (%s)"
-msgstr ""
+msgstr "Byt %q (%s)"
 
 msgid ""
 "Switch %q has an unknown topology - the VLAN settings might not be accurate."
 msgstr ""
 
 msgid "Switch VLAN"
-msgstr ""
+msgstr "Byt VLAN"
 
 msgid "Switch protocol"
-msgstr ""
+msgstr "Byt protokoll"
 
 msgid "Sync with browser"
-msgstr ""
+msgstr "Synkronisera med webbläsare"
 
 msgid "Synchronizing..."
-msgstr ""
+msgstr "Synkroniserar..."
 
 msgid "System"
-msgstr ""
+msgstr "System"
 
 msgid "System Log"
-msgstr ""
+msgstr "Systemlogg"
 
 msgid "System Properties"
-msgstr ""
+msgstr "Systemets egenskaper"
 
 msgid "System log buffer size"
 msgstr ""
 
 msgid "TCP:"
-msgstr ""
+msgstr "TCP:"
 
 msgid "TFTP Settings"
-msgstr ""
+msgstr "Inställningar för TFTP"
 
 msgid "TFTP server root"
-msgstr ""
+msgstr "Root för TFTP-server"
 
 msgid "TX"
-msgstr ""
+msgstr "TX"
 
 msgid "TX Rate"
-msgstr ""
+msgstr "TX-hastighet"
 
 msgid "Table"
-msgstr ""
+msgstr "Tabell"
 
 msgid "Target"
-msgstr ""
+msgstr "Mål"
 
 msgid "Target network"
-msgstr ""
+msgstr "Målnätverk"
 
 msgid "Terminate"
 msgstr ""
@@ -2977,7 +3088,7 @@ msgid ""
 msgstr ""
 
 msgid "The following changes have been committed"
-msgstr ""
+msgstr "Följande ändringar har skickats in"
 
 msgid "The following changes have been reverted"
 msgstr ""
@@ -2986,7 +3097,7 @@ msgid "The following rules are currently active on this system."
 msgstr ""
 
 msgid "The given network name is not unique"
-msgstr ""
+msgstr "Det angivna nätverksnamnet är inte unikt"
 
 msgid ""
 "The hardware is not multi-SSID capable and the existing configuration will "
@@ -3042,16 +3153,16 @@ msgid ""
 msgstr ""
 
 msgid "There are no active leases."
-msgstr ""
+msgstr "Det finns inga aktiva kontrakt."
 
 msgid "There are no pending changes to apply!"
-msgstr ""
+msgstr "Det finns inga pendlande ändringar att verkställa!"
 
 msgid "There are no pending changes to revert!"
-msgstr ""
+msgstr "Det finns inga pendlande ändringar att återkalla"
 
 msgid "There are no pending changes!"
-msgstr ""
+msgstr "Det finns inga pendlande ändringar!"
 
 msgid ""
 "There is no device assigned yet, please attach a network device in the "
@@ -3062,6 +3173,8 @@ msgid ""
 "There is no password set on this router. Please configure a root password to "
 "protect the web interface and enable SSH."
 msgstr ""
+"Det finns inget lösenord inställt på den här routern. Vänligen ställ in ett "
+"root-lösenord för att skydda webbgränssnittet och för att aktivera SSH."
 
 msgid "This IPv4 address of the relay"
 msgstr ""
@@ -3127,39 +3240,41 @@ msgid "This section contains no values yet"
 msgstr ""
 
 msgid "Time Synchronization"
-msgstr ""
+msgstr "Synkronisering av tid"
 
 msgid "Time Synchronization is not configured yet."
-msgstr ""
+msgstr "Synkronisering av tid är inte inställd än."
 
 msgid "Timezone"
-msgstr ""
+msgstr "Tidszon"
 
 msgid ""
 "To restore configuration files, you can upload a previously generated backup "
 "archive here."
 msgstr ""
+"För att återställa konfigurationsfiler så kan du ladda upp ett tidigare "
+"genererat säkerhetskopierings arkiv här."
 
 msgid "Tone"
-msgstr ""
+msgstr "Ton"
 
 msgid "Total Available"
-msgstr ""
+msgstr "Totalt tillgängligt"
 
 msgid "Traceroute"
-msgstr ""
+msgstr "Traceroute"
 
 msgid "Traffic"
-msgstr ""
+msgstr "Trafik"
 
 msgid "Transfer"
-msgstr ""
+msgstr "Överför"
 
 msgid "Transmission Rate"
-msgstr ""
+msgstr "Överföringshastighet"
 
 msgid "Transmit"
-msgstr ""
+msgstr "Överför"
 
 msgid "Transmit Power"
 msgstr ""
@@ -3174,13 +3289,13 @@ msgid "Trigger Mode"
 msgstr ""
 
 msgid "Tunnel ID"
-msgstr ""
+msgstr "Tunnel-ID"
 
 msgid "Tunnel Interface"
-msgstr ""
+msgstr "Tunnelgränssnitt"
 
 msgid "Tunnel Link"
-msgstr ""
+msgstr "Tunnel-länk"
 
 msgid "Tunnel broker protocol"
 msgstr ""
@@ -3189,61 +3304,58 @@ msgid "Tunnel setup server"
 msgstr ""
 
 msgid "Tunnel type"
-msgstr ""
-
-msgid "Turbo Mode"
-msgstr ""
+msgstr "Tunnel-typ"
 
 msgid "Tx-Power"
 msgstr ""
 
 msgid "Type"
-msgstr ""
+msgstr "Typ"
 
 msgid "UDP:"
-msgstr ""
+msgstr "UDP:"
 
 msgid "UMTS only"
-msgstr ""
+msgstr "Endast UMTS"
 
 msgid "UMTS/GPRS/EV-DO"
-msgstr ""
+msgstr "UMTS/GPRS/EV-DO"
 
 msgid "USB Device"
-msgstr ""
+msgstr "USB-enhet"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "USB-portar"
 
 msgid "UUID"
-msgstr ""
+msgstr "UUID"
 
 msgid "Unable to dispatch"
-msgstr ""
+msgstr "Det går inte att skicka"
 
 msgid "Unavailable Seconds (UAS)"
-msgstr ""
+msgstr "Otillgängliga Sekunder (UAS)"
 
 msgid "Unknown"
-msgstr ""
+msgstr "Okänd"
 
 msgid "Unknown Error, password not changed!"
-msgstr ""
+msgstr "Okänt fel, lösenordet ändrades inte!"
 
 msgid "Unmanaged"
 msgstr ""
 
 msgid "Unmount"
-msgstr ""
+msgstr "Avmontera"
 
 msgid "Unsaved Changes"
-msgstr ""
+msgstr "Osparade ändringar"
 
 msgid "Unsupported protocol type."
-msgstr ""
+msgstr "Protokolltypen stöds inte."
 
 msgid "Update lists"
-msgstr ""
+msgstr "Uppdatera listor"
 
 msgid ""
 "Upload a sysupgrade-compatible image here to replace the running firmware. "
@@ -3252,19 +3364,19 @@ msgid ""
 msgstr ""
 
 msgid "Upload archive..."
-msgstr ""
+msgstr "Ladda upp arkiv..."
 
 msgid "Uploaded File"
-msgstr ""
+msgstr "Laddade upp fil"
 
 msgid "Uptime"
-msgstr ""
+msgstr "Upptid"
 
 msgid "Use <code>/etc/ethers</code>"
-msgstr ""
+msgstr "Använd <code>/etc/ethers</code>"
 
 msgid "Use DHCP gateway"
-msgstr ""
+msgstr "Använd DHCP-gateway"
 
 msgid "Use DNS servers advertised by peer"
 msgstr ""
@@ -3282,7 +3394,7 @@ msgid "Use as external overlay (/overlay)"
 msgstr ""
 
 msgid "Use as root filesystem (/)"
-msgstr ""
+msgstr "Använd som root-filsystem (/)"
 
 msgid "Use broadcast flag"
 msgstr ""
@@ -3291,10 +3403,10 @@ msgid "Use builtin IPv6-management"
 msgstr ""
 
 msgid "Use custom DNS servers"
-msgstr ""
+msgstr "Använd anpassade DNS-servrar"
 
 msgid "Use default gateway"
-msgstr ""
+msgstr "Använd standard-gateway"
 
 msgid "Use gateway metric"
 msgstr ""
@@ -3316,20 +3428,25 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
-msgid "User certificate (PEM encoded)"
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
 msgstr ""
 
+msgid "User certificate (PEM encoded)"
+msgstr "Användarcertifikat (PEM-krypterad)"
+
 msgid "User key (PEM encoded)"
-msgstr ""
+msgstr "Användarnyckel (PEM-krypterad)"
 
 msgid "Username"
-msgstr ""
+msgstr "Användarnamn"
 
 msgid "VC-Mux"
-msgstr ""
+msgstr "VC-Mux"
 
 msgid "VDSL"
-msgstr ""
+msgstr "VDSL"
 
 msgid "VLANs on %q"
 msgstr ""
@@ -3338,16 +3455,16 @@ msgid "VLANs on %q (%s)"
 msgstr ""
 
 msgid "VPN Local address"
-msgstr ""
+msgstr "Lokal adress för VPN"
 
 msgid "VPN Local port"
-msgstr ""
+msgstr "Lokal port för VPN"
 
 msgid "VPN Server"
-msgstr ""
+msgstr "VPN-server"
 
 msgid "VPN Server port"
-msgstr ""
+msgstr "Port för VPN-server"
 
 msgid "VPN Server's certificate SHA1 hash"
 msgstr ""
@@ -3356,40 +3473,40 @@ msgid "VPNC (CISCO 3000 (and others) VPN)"
 msgstr ""
 
 msgid "Vendor"
-msgstr ""
+msgstr "Tillverkare"
 
 msgid "Vendor Class to send when requesting DHCP"
 msgstr ""
 
 msgid "Verbose"
-msgstr ""
+msgstr "Utförlig"
 
 msgid "Verbose logging by aiccu daemon"
 msgstr ""
 
 msgid "Verify"
-msgstr ""
+msgstr "Verkställ"
 
 msgid "Version"
-msgstr ""
+msgstr "Version"
 
 msgid "WDS"
-msgstr ""
+msgstr "WDS"
 
 msgid "WEP Open System"
-msgstr ""
+msgstr "Öppet System WEP"
 
 msgid "WEP Shared Key"
 msgstr ""
 
 msgid "WEP passphrase"
-msgstr ""
+msgstr "WEP-lösenordsfras"
 
 msgid "WMM Mode"
-msgstr ""
+msgstr "WMM-läge"
 
 msgid "WPA passphrase"
-msgstr ""
+msgstr "WPA-lösenordsfras"
 
 msgid ""
 "WPA-Encryption requires wpa_supplicant (for client mode) or hostapd (for AP "
@@ -3401,19 +3518,20 @@ msgid ""
 msgstr ""
 
 msgid "Waiting for changes to be applied..."
-msgstr ""
+msgstr "Väntar på att ändringarna ska tillämpas..."
 
 msgid "Waiting for command to complete..."
-msgstr ""
+msgstr "Väntar på att kommandot ska avsluta..."
 
 msgid "Waiting for device..."
-msgstr ""
+msgstr "Väntar på enheten..."
 
 msgid "Warning"
-msgstr ""
+msgstr "Varning"
 
 msgid "Warning: There are unsaved changes that will get lost on reboot!"
 msgstr ""
+"Varning: Det finns osparade ändringar som kommer att förloras vid omstart!"
 
 msgid "Whether to create an IPv6 default route over the tunnel"
 msgstr ""
@@ -3422,52 +3540,49 @@ msgid "Whether to route only packets from delegated prefixes"
 msgstr ""
 
 msgid "Width"
-msgstr ""
+msgstr "Bredd"
 
 msgid "WireGuard VPN"
 msgstr ""
 
 msgid "Wireless"
-msgstr ""
+msgstr "Trådlöst"
 
 msgid "Wireless Adapter"
-msgstr ""
+msgstr "Trådlös adapter"
 
 msgid "Wireless Network"
-msgstr ""
+msgstr "Trådlöst nätverk"
 
 msgid "Wireless Overview"
-msgstr ""
+msgstr "Trådlös överblick"
 
 msgid "Wireless Security"
-msgstr ""
+msgstr "Trådlös säkerhet"
 
 msgid "Wireless is disabled or not associated"
-msgstr ""
+msgstr "Trådlöst är avstängt eller inte associerat"
 
 msgid "Wireless is restarting..."
-msgstr ""
+msgstr "Trådlöst startar om..."
 
 msgid "Wireless network is disabled"
-msgstr ""
+msgstr "Trådlöst nätverk är avstängt"
 
 msgid "Wireless network is enabled"
-msgstr ""
+msgstr "Trådlöst nätverk är aktiverat"
 
 msgid "Wireless restarted"
-msgstr ""
+msgstr "Trådlöst startade om"
 
 msgid "Wireless shut down"
-msgstr ""
+msgstr "Trådlöst stängde ner"
 
 msgid "Write received DNS requests to syslog"
-msgstr ""
+msgstr "Skriv mottagna DNS-förfrågningar till syslogg"
 
 msgid "Write system log to file"
-msgstr ""
-
-msgid "XR Support"
-msgstr ""
+msgstr "Skriv systemlogg till fil"
 
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
@@ -3476,47 +3591,49 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
+"Du måste aktivera JavaScript i din webbläsare, annars kommer inte LuCi att "
+"fungera korrekt."
 
 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 ""
+"Din Internet Explorer är för gammal för att visa den här sidan korrekt. "
+"Vänligen uppgradera den till minst version 7 eller använd en annan "
+"webbläsare till exempel Firefox, Opera eller Safari."
 
 msgid "any"
-msgstr ""
+msgstr "något"
 
 msgid "auto"
-msgstr ""
-
-msgid "automatic"
-msgstr ""
+msgstr "auto"
 
 msgid "baseT"
 msgstr ""
 
 msgid "bridged"
-msgstr ""
+msgstr "bryggad"
 
 msgid "create:"
-msgstr ""
+msgstr "skapa:"
 
 msgid "creates a bridge over specified interface(s)"
-msgstr ""
+msgstr "skapar en brygga över angivna gränssnitt(en)"
 
 msgid "dB"
-msgstr ""
+msgstr "dB"
 
 msgid "dBm"
-msgstr ""
+msgstr "dBm"
 
 msgid "disable"
-msgstr ""
+msgstr "stäng ner"
 
 msgid "disabled"
-msgstr ""
+msgstr "avstängd"
 
 msgid "expired"
 msgstr ""
@@ -3527,85 +3644,79 @@ msgid ""
 msgstr ""
 
 msgid "forward"
-msgstr ""
+msgstr "vidarebefordra"
 
 msgid "full-duplex"
-msgstr ""
+msgstr "full-duplex"
 
 msgid "half-duplex"
-msgstr ""
+msgstr "halv-duplex"
 
 msgid "help"
-msgstr ""
+msgstr "hjälp"
 
 msgid "hidden"
-msgstr ""
+msgstr "gömd"
 
 msgid "hybrid mode"
-msgstr ""
+msgstr "hybrid-läge"
 
 msgid "if target is a network"
-msgstr ""
+msgstr "om målet är ett nätverk"
 
 msgid "input"
-msgstr ""
+msgstr "inmatning"
 
 msgid "kB"
-msgstr ""
+msgstr "kB"
 
 msgid "kB/s"
-msgstr ""
+msgstr "kB/s"
 
 msgid "kbit/s"
-msgstr ""
+msgstr "kbit/s"
 
 msgid "local <abbr title=\"Domain Name System\">DNS</abbr> file"
-msgstr ""
+msgstr "lokal <abbr title=\"Domain Name System\">DNS</abbr>-fil"
 
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
-msgstr ""
+msgid "minutes"
+msgstr "minuter"
 
 msgid "no"
-msgstr ""
+msgstr "nej"
 
 msgid "no link"
-msgstr ""
+msgstr "ingen länk"
 
 msgid "none"
 msgstr ""
 
 msgid "not present"
-msgstr ""
+msgstr "inte tillgängligt"
 
 msgid "off"
-msgstr ""
+msgstr "av"
 
 msgid "on"
-msgstr ""
+msgstr ""
 
 msgid "open"
-msgstr ""
+msgstr "öppen"
 
 msgid "overlay"
 msgstr ""
 
 msgid "relay mode"
-msgstr ""
+msgstr "relä-läge"
 
 msgid "routed"
 msgstr ""
 
 msgid "server mode"
-msgstr ""
-
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
+msgstr "server-läge"
 
 msgid "stateful-only"
 msgstr ""
@@ -3617,25 +3728,28 @@ msgid "stateless + stateful"
 msgstr ""
 
 msgid "tagged"
+msgstr "taggad"
+
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
 msgstr ""
 
 msgid "unknown"
-msgstr ""
+msgstr "okänd"
 
 msgid "unlimited"
-msgstr ""
+msgstr "obegränsat"
 
 msgid "unspecified"
-msgstr ""
+msgstr "ospecifierat"
 
 msgid "unspecified -or- create:"
-msgstr ""
+msgstr "ospecifierat -eller- skapa:"
 
 msgid "untagged"
-msgstr ""
+msgstr "otaggat"
 
 msgid "yes"
-msgstr ""
+msgstr "ja"
 
 msgid "« Back"
-msgstr ""
+msgstr "« Bakåt"
index 5159f04..8cbae4f 100644 (file)
@@ -40,12 +40,36 @@ msgstr ""
 msgid "15 Minute Load:"
 msgstr ""
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr ""
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 
@@ -108,6 +132,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -126,9 +155,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr ""
-
 msgid "ARP retry threshold"
 msgstr ""
 
@@ -364,15 +390,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr ""
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr ""
 
@@ -445,9 +465,6 @@ msgstr ""
 msgid "Back to scan results"
 msgstr ""
 
-msgid "Background Scan"
-msgstr ""
-
 msgid "Backup / Flash Firmware"
 msgstr ""
 
@@ -602,7 +619,11 @@ msgstr ""
 msgid "Common Configuration"
 msgstr ""
 
-msgid "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
 msgstr ""
 
 msgid "Configuration"
@@ -818,10 +839,10 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
+msgid "Disabled"
 msgstr ""
 
-msgid "Disabled"
+msgid "Disabled (default)"
 msgstr ""
 
 msgid "Discard upstream RFC1918 responses"
@@ -858,9 +879,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr ""
 
@@ -959,6 +977,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -983,6 +1004,11 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1029,6 +1055,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1041,9 +1073,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr ""
 
@@ -1079,6 +1108,9 @@ msgstr ""
 msgid "Firewall"
 msgstr ""
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr ""
 
@@ -1124,6 +1156,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1367,9 +1402,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1382,7 +1423,7 @@ msgstr ""
 msgid "Identity"
 msgstr ""
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1464,6 +1505,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1509,12 +1553,15 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr ""
 
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1583,9 +1630,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -1627,6 +1671,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1759,9 +1819,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1797,9 +1854,6 @@ msgstr ""
 msgid "Metric"
 msgstr ""
 
-msgid "Minimum Rate"
-msgstr ""
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1812,6 +1866,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr ""
 
@@ -1868,9 +1925,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr ""
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1883,6 +1937,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2057,18 +2114,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2105,9 +2174,6 @@ msgstr ""
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2155,6 +2221,9 @@ msgstr ""
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2212,6 +2281,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr ""
 
@@ -2284,6 +2356,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2349,6 +2430,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2428,6 +2515,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2458,9 +2548,6 @@ msgstr ""
 msgid "References"
 msgstr ""
 
-msgid "Regulatory Domain"
-msgstr ""
-
 msgid "Relay"
 msgstr ""
 
@@ -2500,19 +2587,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2652,9 +2747,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2678,6 +2770,11 @@ msgstr ""
 msgid "Services"
 msgstr ""
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2812,9 +2909,6 @@ msgstr ""
 msgid "Static Routes"
 msgstr ""
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3178,9 +3272,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr ""
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3303,6 +3394,11 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3453,9 +3549,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr ""
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3463,7 +3556,7 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3478,9 +3571,6 @@ msgstr ""
 msgid "auto"
 msgstr ""
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3552,7 +3642,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3588,12 +3678,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3606,6 +3690,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
index 3c6c85c..e629321 100644 (file)
@@ -50,12 +50,36 @@ msgstr "1 Dakikalık Yük:"
 msgid "15 Minute Load:"
 msgstr "15 Dakikalık Yük:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "5 Dakikalık Yük:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\\\"Temel Servis Ayar Tanımlayıcısı\\\"> BSSID </abbr>"
 
@@ -124,6 +148,11 @@ msgstr "<abbr title=\"maximal\">Maks.</abbr> eşzamanlı sorgu"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -142,9 +171,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR Desteği"
-
 msgid "ARP retry threshold"
 msgstr "ARP yenileme aralığı"
 
@@ -384,15 +410,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr ""
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s Kablosuz Denetleyicisi"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Kimlik doğrulama"
 
@@ -465,9 +485,6 @@ msgstr "Genel Bakışa dön"
 msgid "Back to scan results"
 msgstr "Tarama sonuçlarına dön"
 
-msgid "Background Scan"
-msgstr "Arka Planda Tarama"
-
 msgid "Backup / Flash Firmware"
 msgstr ""
 
@@ -622,7 +639,11 @@ msgstr ""
 msgid "Common Configuration"
 msgstr ""
 
-msgid "Compression"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
 msgstr ""
 
 msgid "Configuration"
@@ -838,10 +859,10 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
+msgid "Disabled"
 msgstr ""
 
-msgid "Disabled"
+msgid "Disabled (default)"
 msgstr ""
 
 msgid "Discard upstream RFC1918 responses"
@@ -878,9 +899,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr ""
-
 msgid "Domain required"
 msgstr ""
 
@@ -979,6 +997,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1003,6 +1024,11 @@ msgstr ""
 msgid "Enabled"
 msgstr ""
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 
@@ -1049,6 +1075,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1061,9 +1093,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr ""
-
 msgid "File"
 msgstr ""
 
@@ -1099,6 +1128,9 @@ msgstr ""
 msgid "Firewall"
 msgstr ""
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr ""
 
@@ -1144,6 +1176,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1387,9 +1422,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1402,7 +1443,7 @@ msgstr ""
 msgid "Identity"
 msgstr ""
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1484,6 +1525,9 @@ msgstr ""
 msgid "Interface"
 msgstr ""
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1529,12 +1573,15 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr ""
 
+msgid "Isolate Clients"
+msgstr ""
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
 msgstr ""
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1603,9 +1650,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr ""
 
-msgid "Leasetime"
-msgstr ""
-
 msgid "Leasetime remaining"
 msgstr ""
 
@@ -1647,6 +1691,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1779,9 +1839,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr ""
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1817,9 +1874,6 @@ msgstr ""
 msgid "Metric"
 msgstr ""
 
-msgid "Minimum Rate"
-msgstr ""
-
 msgid "Minimum hold time"
 msgstr ""
 
@@ -1832,6 +1886,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr ""
 
@@ -1888,9 +1945,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr ""
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1903,6 +1957,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2077,18 +2134,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+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. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"Optional. Base64-encoded preshared key. Adds in an additional layer of "
+"symmetric-key cryptography for post-quantum resistance."
 msgstr ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2125,9 +2194,6 @@ msgstr ""
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr ""
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2175,6 +2241,9 @@ msgstr ""
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2232,6 +2301,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr ""
 
@@ -2304,6 +2376,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2369,6 +2450,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2448,6 +2535,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2478,9 +2568,6 @@ msgstr ""
 msgid "References"
 msgstr ""
 
-msgid "Regulatory Domain"
-msgstr ""
-
 msgid "Relay"
 msgstr ""
 
@@ -2520,19 +2607,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2672,9 +2767,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr ""
 
-msgid "Separate WDS"
-msgstr ""
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2698,6 +2790,11 @@ msgstr ""
 msgid "Services"
 msgstr ""
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2832,9 +2929,6 @@ msgstr ""
 msgid "Static Routes"
 msgstr ""
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3198,9 +3292,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr ""
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3323,6 +3414,11 @@ msgstr ""
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3473,9 +3569,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr ""
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3483,7 +3576,7 @@ msgid ""
 msgstr ""
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 "LuCI'nin düzgün çalışması için tarayıcınızda Java Scripti "
 "etkinleştirmelisiniz."
@@ -3500,9 +3593,6 @@ msgstr "herhangi"
 msgid "auto"
 msgstr "otomatik"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr ""
 
@@ -3574,7 +3664,7 @@ msgstr "yerel <abbr title=\"Domain Name System\">DNS</abbr> dosyası"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3610,12 +3700,6 @@ msgstr "yönlendirildi"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3628,6 +3712,9 @@ msgstr ""
 msgid "tagged"
 msgstr "etiketlendi"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3648,3 +3735,12 @@ msgstr "evet"
 
 msgid "« Back"
 msgstr "« Geri"
+
+#~ msgid "AR Support"
+#~ msgstr "AR Desteği"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s Kablosuz Denetleyicisi"
+
+#~ msgid "Background Scan"
+#~ msgstr "Arka Planda Tarama"
index aefbea5..05bd03d 100644 (file)
@@ -51,12 +51,36 @@ msgstr "Навантаження за 1 хвилину:"
 msgid "15 Minute Load:"
 msgstr "Навантаження за 15 хвилин:"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "Навантаження за 5 хвилин:"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr ""
 "<abbr title=\"Basic Service Set Identifier — ідентифікатор основної служби "
@@ -139,6 +163,11 @@ msgstr "<abbr title=\"Максимум\">Max.</abbr> одночасних зап
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Парний: %s / Груповий: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -158,9 +187,6 @@ msgid "APN"
 msgstr ""
 "<abbr title=\"Access Point Name — символічна назва точки доступу\">APN</abbr>"
 
-msgid "AR Support"
-msgstr "Підтримка AR"
-
 msgid "ARP retry threshold"
 msgstr "Поріг повтору ARP"
 
@@ -408,15 +434,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "Приєднані станції"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Бездротовий 802.11%s контролер Atheros"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Автентифікація"
 
@@ -489,9 +509,6 @@ msgstr "Повернутися до переліку"
 msgid "Back to scan results"
 msgstr "Повернутися до результатів сканування"
 
-msgid "Background Scan"
-msgstr "Сканування у фоновому режимі"
-
 msgid "Backup / Flash Firmware"
 msgstr "Резервне копіювання / Оновлення прошивки"
 
@@ -660,8 +677,12 @@ msgstr "Команда"
 msgid "Common Configuration"
 msgstr "Загальна конфігурація"
 
-msgid "Compression"
-msgstr "Стиснення"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Конфігурація"
@@ -883,12 +904,12 @@ msgstr "Вимкнути настроювання DNS"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Вимкнути таймер HW-Beacon"
-
 msgid "Disabled"
 msgstr "Вимкнено"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "Відкидати RFC1918-відповіді від клієнта на сервер"
 
@@ -930,9 +951,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr "Не спрямовувати зворотний перегляд для локальних мереж"
 
-msgid "Do not send probe responses"
-msgstr "Не надсилати відповіді на зондування"
-
 msgid "Domain required"
 msgstr "Потрібен домен"
 
@@ -1040,6 +1058,9 @@ msgstr "Увімкнути підтримку VLAN"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "Увімкнути learning та aging"
 
@@ -1064,6 +1085,11 @@ msgstr "Увімкнено/Вимкнено"
 msgid "Enabled"
 msgstr "Увімкнено"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr ""
 "Увімкнути <abbr title=\"Spanning Tree Protocol\">STP</abbr> на цьому мосту"
@@ -1112,6 +1138,12 @@ msgstr "Термін оренди адрес, мінімум 2 хвилини (<
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "Зовнішній сервер системного журналу"
 
@@ -1124,9 +1156,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Швидкі фрейми"
-
 msgid "File"
 msgstr "Файл"
 
@@ -1162,6 +1191,9 @@ msgstr "Готово"
 msgid "Firewall"
 msgstr "Брандмауер"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "Настройки брандмауера"
 
@@ -1207,6 +1239,9 @@ msgstr "Примусово TKIP"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "Примусово TKIP та CCMP (AES)"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1456,9 +1491,15 @@ msgstr "Довжина префікса IPv6"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-адреса"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6 у IPv4 (RFC4213)"
 
@@ -1471,7 +1512,7 @@ msgstr "IPv6 через IPv4 (6to4)"
 msgid "Identity"
 msgstr "Ідентичність"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1563,6 +1604,9 @@ msgstr "Інстальовані пакети"
 msgid "Interface"
 msgstr "Інтерфейс"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "Конфігурація інтерфейсу"
 
@@ -1609,6 +1653,9 @@ msgstr "Задано невірний VLAN ID! Доступні тільки у
 msgid "Invalid username and/or password! Please try again."
 msgstr "Неприпустиме ім’я користувача та/або пароль! Спробуйте ще раз."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1617,8 +1664,8 @@ msgstr ""
 "Схоже, що ви намагаєтеся залити образ, який не вміщається у флеш-пам'ять! "
 "Перевірте файл образу!"
 
-msgid "Java Script required!"
-msgstr "Потрібен Java Script!"
+msgid "JavaScript required!"
+msgstr "Потрібен JavaScript!"
 
 msgid "Join Network"
 msgstr "Підключення до мережі"
@@ -1686,9 +1733,6 @@ msgstr "Час чинності оренди"
 msgid "Leasefile"
 msgstr "Файл оренд"
 
-msgid "Leasetime"
-msgstr "Час оренди"
-
 msgid "Leasetime remaining"
 msgstr "Час оренди, що лишився"
 
@@ -1732,6 +1776,22 @@ msgstr ""
 "Список <abbr title=\"Domain Name System\">DNS</abbr>-серверів, до яких "
 "пересилати запити"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1873,9 +1933,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Максимальна швидкість"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "Максимально допустима кількість активних оренд DHCP"
 
@@ -1911,9 +1968,6 @@ msgstr "Використання пам'яті, %"
 msgid "Metric"
 msgstr "Метрика"
 
-msgid "Minimum Rate"
-msgstr "Мінімальна швидкість"
-
 msgid "Minimum hold time"
 msgstr "Мінімальний час утримування"
 
@@ -1926,6 +1980,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "Відсутні розширення для протоколу %q"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Режим"
 
@@ -1984,9 +2041,6 @@ msgstr "Вниз"
 msgid "Move up"
 msgstr "Вгору"
 
-msgid "Multicast Rate"
-msgstr "Швидкість багатоадресного потоку"
-
 msgid "Multicast address"
 msgstr "Адреса багатоадресного потоку"
 
@@ -1999,6 +2053,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2179,18 +2236,30 @@ msgstr "Опція змінена"
 msgid "Option removed"
 msgstr "Опція видалена"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2227,9 +2296,6 @@ msgstr "Вих."
 msgid "Outbound:"
 msgstr "Вихідний:"
 
-msgid "Outdoor Channels"
-msgstr "Зовнішні канали"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2282,6 +2348,9 @@ msgstr ""
 "<abbr title=\"Personal Identification Number — Персональний ідентифікаційний "
 "номер\">>PIN</abbr>"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP"
 
@@ -2339,6 +2408,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "Пароль успішно змінено!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Шлях до центру сертифікції"
 
@@ -2411,6 +2483,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2478,6 +2559,12 @@ msgstr ""
 msgid "Quality"
 msgstr "Якість"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2573,6 +2660,9 @@ msgstr "Трафік у реальному часі"
 msgid "Realtime Wireless"
 msgstr "Бездротові мережі у реальному часі"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "Захист від переприв'язки"
 
@@ -2603,9 +2693,6 @@ msgstr "Перепідключення інтерфейсу"
 msgid "References"
 msgstr "Посилання"
 
-msgid "Regulatory Domain"
-msgstr "Регулятивний домен"
-
 msgid "Relay"
 msgstr "Ретранслятор"
 
@@ -2645,19 +2732,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "Потрібно для деяких провайдерів, наприклад, Charter із DOCSIS 3"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2801,9 +2896,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Розділяти клієнтів"
 
-msgid "Separate WDS"
-msgstr "Розділяти WDS"
-
 msgid "Server Settings"
 msgstr "Настройки сервера"
 
@@ -2827,6 +2919,11 @@ msgstr "Тип сервісу"
 msgid "Services"
 msgstr "Сервіси"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "Настройки синхронізації часу"
@@ -2969,9 +3066,6 @@ msgstr "Статичні оренди"
 msgid "Static Routes"
 msgstr "Статичні маршрути"
 
-msgid "Static WDS"
-msgstr "Статичний WDS"
-
 msgid "Static address"
 msgstr "Статичні адреси"
 
@@ -3398,9 +3492,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Режим Turbo"
-
 msgid "Tx-Power"
 msgstr "Потужність передавача"
 
@@ -3530,6 +3621,11 @@ msgstr "Використано"
 msgid "Used Key Slot"
 msgstr "Використовується слот ключа"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3682,9 +3778,6 @@ msgstr "Записувати отримані DNS-запити до систем
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Підтримка XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3696,9 +3789,9 @@ msgstr ""
 "пристрій може стати недоступним!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
-"Ви повинні увімкнути Java Script у вашому браузері, або LuCI не буде "
+"Ви повинні увімкнути JavaScript у вашому браузері, або LuCI не буде "
 "працювати належним чином."
 
 msgid ""
@@ -3713,9 +3806,6 @@ msgstr "будь-який"
 msgid "auto"
 msgstr "авто"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3791,7 +3881,7 @@ msgstr ""
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3827,12 +3917,6 @@ msgstr "спрямовано"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3845,6 +3929,9 @@ msgstr ""
 msgid "tagged"
 msgstr "з позначкою"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "невідомий"
 
@@ -3866,6 +3953,57 @@ msgstr "так"
 msgid "« Back"
 msgstr "« Назад"
 
+#~ msgid "Leasetime"
+#~ msgstr "Час оренди"
+
+#~ msgid "AR Support"
+#~ msgstr "Підтримка AR"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Бездротовий 802.11%s контролер Atheros"
+
+#~ msgid "Background Scan"
+#~ msgstr "Сканування у фоновому режимі"
+
+#~ msgid "Compression"
+#~ msgstr "Стиснення"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Вимкнути таймер HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Не надсилати відповіді на зондування"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Швидкі фрейми"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Максимальна швидкість"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Мінімальна швидкість"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Швидкість багатоадресного потоку"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Зовнішні канали"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Регулятивний домен"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Розділяти WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "Статичний WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Режим Turbo"
+
+#~ msgid "XR Support"
+#~ msgstr "Підтримка XR"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "Якщо ви залишите це невибраним, буде створена додаткова мережа."
 
index a8934cd..1a6cadc 100644 (file)
@@ -52,12 +52,36 @@ msgstr ""
 msgid "15 Minute Load:"
 msgstr ""
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr ""
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Dịch vụ căn bản đặt Identifier\">BSSID</abbr>"
 
@@ -122,6 +146,11 @@ msgstr ""
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr ""
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -140,9 +169,6 @@ msgstr ""
 msgid "APN"
 msgstr ""
 
-msgid "AR Support"
-msgstr "Hỗ trợ AR"
-
 msgid "ARP retry threshold"
 msgstr ""
 
@@ -378,15 +404,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr ""
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr ""
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "Xác thực"
 
@@ -459,9 +479,6 @@ msgstr ""
 msgid "Back to scan results"
 msgstr ""
 
-msgid "Background Scan"
-msgstr "Background Scan"
-
 msgid "Backup / Flash Firmware"
 msgstr ""
 
@@ -616,8 +633,12 @@ msgstr "Lệnh"
 msgid "Common Configuration"
 msgstr ""
 
-msgid "Compression"
-msgstr "Sức nén"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "Cấu hình"
@@ -834,12 +855,12 @@ msgstr ""
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "Vô hiệu hóa bộ chỉnh giờ HW-Beacon"
-
 msgid "Disabled"
 msgstr ""
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr ""
 
@@ -878,9 +899,6 @@ msgstr ""
 msgid "Do not forward reverse lookups for local networks"
 msgstr ""
 
-msgid "Do not send probe responses"
-msgstr "Không gửi nhắc hồi đáp"
-
 msgid "Domain required"
 msgstr "Domain yêu cầu"
 
@@ -984,6 +1002,9 @@ msgstr ""
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr ""
 
@@ -1008,6 +1029,11 @@ msgstr "Cho kích hoạt/ Vô hiệu hóa"
 msgid "Enabled"
 msgstr ""
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "Kích hoạt Spanning Tree Protocol trên cầu nối này"
 
@@ -1054,6 +1080,12 @@ msgstr ""
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr ""
 
@@ -1066,9 +1098,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "Khung nhanh"
-
 msgid "File"
 msgstr ""
 
@@ -1104,6 +1133,9 @@ msgstr ""
 msgid "Firewall"
 msgstr "Firewall"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr ""
 
@@ -1149,6 +1181,9 @@ msgstr ""
 msgid "Force TKIP and CCMP (AES)"
 msgstr ""
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1394,9 +1429,15 @@ msgstr ""
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr ""
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr ""
 
@@ -1409,7 +1450,7 @@ msgstr ""
 msgid "Identity"
 msgstr "Nhận dạng"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1496,6 +1537,9 @@ msgstr ""
 msgid "Interface"
 msgstr "Giao diện "
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr ""
 
@@ -1541,6 +1585,9 @@ msgstr ""
 msgid "Invalid username and/or password! Please try again."
 msgstr "Tên và mật mã không đúng. Xin thử lại "
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
@@ -1549,7 +1596,7 @@ msgstr ""
 "Dường như bạn cố gắng flash một hình ảnh không phù hợp với bộ nhớ flash, xin "
 "vui lòng xác minh các tập tin hình ảnh!"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr ""
 
 msgid "Join Network"
@@ -1618,9 +1665,6 @@ msgstr ""
 msgid "Leasefile"
 msgstr "Leasefile"
 
-msgid "Leasetime"
-msgstr "Leasetime"
-
 msgid "Leasetime remaining"
 msgstr "Leasetime còn lại"
 
@@ -1662,6 +1706,22 @@ msgid ""
 "requests to"
 msgstr ""
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1794,9 +1854,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "Mức cao nhất"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr ""
 
@@ -1832,9 +1889,6 @@ msgstr "Memory usage (%)"
 msgid "Metric"
 msgstr "Metric"
 
-msgid "Minimum Rate"
-msgstr "Mức thấp nhất"
-
 msgid "Minimum hold time"
 msgstr "Mức thấp nhất"
 
@@ -1847,6 +1901,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr ""
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "Chế độ"
 
@@ -1905,9 +1962,6 @@ msgstr ""
 msgid "Move up"
 msgstr ""
 
-msgid "Multicast Rate"
-msgstr "Multicast Rate"
-
 msgid "Multicast address"
 msgstr ""
 
@@ -1920,6 +1974,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2100,18 +2157,30 @@ msgstr ""
 msgid "Option removed"
 msgstr ""
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2148,9 +2217,6 @@ msgstr "Ra khỏi"
 msgid "Outbound:"
 msgstr ""
 
-msgid "Outdoor Channels"
-msgstr "Kênh ngoại mạng"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2198,6 +2264,9 @@ msgstr "PID"
 msgid "PIN"
 msgstr ""
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr ""
 
@@ -2255,6 +2324,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr ""
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "Đường dẫn tới CA-Certificate"
 
@@ -2327,6 +2399,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2392,6 +2473,12 @@ msgstr ""
 msgid "Quality"
 msgstr ""
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2473,6 +2560,9 @@ msgstr ""
 msgid "Realtime Wireless"
 msgstr ""
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr ""
 
@@ -2503,9 +2593,6 @@ msgstr ""
 msgid "References"
 msgstr "Tham chiếu"
 
-msgid "Regulatory Domain"
-msgstr "Miền điều chỉnh"
-
 msgid "Relay"
 msgstr ""
 
@@ -2545,19 +2632,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr ""
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2699,9 +2794,6 @@ msgstr ""
 msgid "Separate Clients"
 msgstr "Cô lập đối tượng"
 
-msgid "Separate WDS"
-msgstr "Phân tách WDS"
-
 msgid "Server Settings"
 msgstr ""
 
@@ -2725,6 +2817,11 @@ msgstr ""
 msgid "Services"
 msgstr "Dịch vụ "
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 msgid "Set up Time Synchronization"
 msgstr ""
 
@@ -2859,9 +2956,6 @@ msgstr "Thống kê leases"
 msgid "Static Routes"
 msgstr "Static Routes"
 
-msgid "Static WDS"
-msgstr ""
-
 msgid "Static address"
 msgstr ""
 
@@ -3240,9 +3334,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "Turbo Mode"
-
 msgid "Tx-Power"
 msgstr ""
 
@@ -3365,6 +3456,11 @@ msgstr "Đã sử dụng"
 msgid "Used Key Slot"
 msgstr ""
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3515,9 +3611,6 @@ msgstr ""
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "Hỗ trợ XR"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
@@ -3529,7 +3622,7 @@ msgstr ""
 "bạn chó thể trở nên không truy cập được</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
+"You must enable JavaScript in your browser or LuCI will not work properly."
 msgstr ""
 
 msgid ""
@@ -3544,10 +3637,6 @@ msgstr ""
 msgid "auto"
 msgstr "tự động"
 
-#, fuzzy
-msgid "automatic"
-msgstr "thống kê"
-
 msgid "baseT"
 msgstr ""
 
@@ -3621,7 +3710,7 @@ msgstr "Tập tin <abbr title=\"Domain Name System\">DNS</abbr> địa phương"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3657,12 +3746,6 @@ msgstr ""
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3675,6 +3758,9 @@ msgstr ""
 msgid "tagged"
 msgstr ""
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr ""
 
@@ -3695,3 +3781,52 @@ msgstr ""
 
 msgid "« Back"
 msgstr ""
+
+#~ msgid "Leasetime"
+#~ msgstr "Leasetime"
+
+#, fuzzy
+#~ msgid "automatic"
+#~ msgstr "thống kê"
+
+#~ msgid "AR Support"
+#~ msgstr "Hỗ trợ AR"
+
+#~ msgid "Background Scan"
+#~ msgstr "Background Scan"
+
+#~ msgid "Compression"
+#~ msgstr "Sức nén"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "Vô hiệu hóa bộ chỉnh giờ HW-Beacon"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "Không gửi nhắc hồi đáp"
+
+#~ msgid "Fast Frames"
+#~ msgstr "Khung nhanh"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "Mức cao nhất"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "Mức thấp nhất"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "Multicast Rate"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "Kênh ngoại mạng"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "Miền điều chỉnh"
+
+#~ msgid "Separate WDS"
+#~ msgstr "Phân tách WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo Mode"
+
+#~ msgid "XR Support"
+#~ msgstr "Hỗ trợ XR"
index 37bf6d7..7383166 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-01-07 21:46+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 1.8.11\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 "-- 更多选项 --"
@@ -44,77 +34,106 @@ msgid "-- match by label --"
 msgstr "-- 根据标签匹配 --"
 
 msgid "-- match by uuid --"
-msgstr ""
+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"
 
 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 字节标识符,无冒号分隔"
+
+msgid "802.11r Fast Transition"
+msgstr "802.11r 快速切换"
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr "802.11w 关联 SA 查询最大超时"
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr "802.11w 关联 SA 查询重试超时"
+
+msgid "802.11w Management Frame Protection"
+msgstr "802.11w 管理帧保护"
+
+msgid "802.11w maximum timeout"
+msgstr "802.11w 最大超时"
+
+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 ""
+"按照“解析文件”里的顺序查询 <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 "最大并发查询数"
@@ -122,6 +141,12 @@ msgstr "最大并发查询数"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+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"
 
@@ -140,37 +165,34 @@ msgstr "ANSI T1.413"
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR支持"
-
 msgid "ARP retry threshold"
-msgstr "ARP重试阈值"
+msgstr "ARP 重试阈值"
 
 msgid "ATM (Asynchronous Transfer Mode)"
-msgstr "ATM(异步传输模式)"
+msgstr "ATM(异步传输模式)"
 
 msgid "ATM Bridges"
-msgstr "ATM桥接"
+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 "
 "Linux network interfaces which can be used in conjunction with DHCP or PPP "
 "to dial into the provider network."
 msgstr ""
-"ATM桥是以AAL5协议封装以太网的虚拟Linux网桥,用于协同DHCP或PPP来拨号连接到网络"
-"运营商。"
+"ATM 桥是以 AAL5 协议封装以太网的虚拟 Linux 网桥,用于协同 DHCP 或 PPP 来拨号"
+"è¿\9eæ\8e¥å\88°ç½\91ç»\9cè¿\90è\90¥å\95\86ã\80\82"
 
 msgid "ATM device number"
-msgstr "ATM设备号码"
+msgstr "ATM 设备号码"
 
 msgid "ATU-C System Vendor ID"
-msgstr "ATU-C系统供应商ID"
+msgstr "ATU-C 系统供应商 ID"
 
 msgid "AYIYA"
 msgstr "AYIYA"
@@ -179,7 +201,7 @@ msgid "Access Concentrator"
 msgstr "接入集中器"
 
 msgid "Access Point"
-msgstr "接入点AP"
+msgstr "接入点 AP"
 
 msgid "Action"
 msgstr "动作"
@@ -191,37 +213,37 @@ 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 "活动连接"
 
 msgid "Active DHCP Leases"
-msgstr "已分配的DHCP租约"
+msgstr "已分配的 DHCP 租约"
 
 msgid "Active DHCPv6 Leases"
-msgstr "已分配的DHCPv6租约"
+msgstr "已分配的 DHCPv6 租约"
 
 msgid "Ad-Hoc"
-msgstr "点对点Ad-Hoc"
+msgstr "点对点 Ad-Hoc"
 
 msgid "Add"
 msgstr "添加"
 
 msgid "Add local domain suffix to names served from hosts files"
-msgstr "添加本地域名后缀到HOSTS文件中的域名"
+msgstr "添加本地域名后缀到 HOSTS 文件中的域名"
 
 msgid "Add new interface..."
 msgstr "添加新接口..."
 
 msgid "Additional Hosts files"
-msgstr "额外的HOSTS文件"
+msgstr "额外的 HOSTS 文件"
 
 msgid "Additional servers file"
-msgstr "额外的SERVERS文件"
+msgstr "额外的 SERVERS 文件"
 
 msgid "Address"
 msgstr "地址"
@@ -236,7 +258,7 @@ msgid "Advanced Settings"
 msgstr "高级设置"
 
 msgid "Aggregate Transmit Power(ACTATP)"
-msgstr "总发射功率(ACTATP)"
+msgstr "总发射功率(ACTATP)"
 
 msgid "Alert"
 msgstr "警戒"
@@ -244,13 +266,13 @@ msgstr "警戒"
 msgid ""
 "Allocate IP addresses sequentially, starting from the lowest available "
 "address"
-msgstr "从最低可用地址开始顺序分配IP地址"
+msgstr "从最低可用地址开始顺序分配 IP 地址"
 
 msgid "Allocate IP sequentially"
-msgstr "顺序分配IP"
+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 "仅允许列表外"
@@ -262,36 +284,36 @@ msgid "Allow localhost"
 msgstr "允许本机"
 
 msgid "Allow remote hosts to connect to local SSH forwarded ports"
-msgstr "允许远程主机连接到本地SSH转发端口"
+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>用户凭密码登录"
+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"
+msgstr "允许的 IP"
 
 msgid ""
 "Also see <a href=\"https://www.sixxs.net/faq/connectivity/?faq=comparison"
 "\">Tunneling Comparison</a> on SIXXS"
 msgstr ""
-"也请查看SIXXS上的<a href=\"https://www.sixxs.net/faq/connectivity/?"
+"也请查看 SIXXS 上的<a href=\"https://www.sixxs.net/faq/connectivity/?"
 "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"
@@ -306,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"
@@ -318,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"
@@ -333,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 "匿名身份"
@@ -348,7 +370,7 @@ msgid "Anonymous Mount"
 msgstr "自动挂载未配置的磁盘分区"
 
 msgid "Anonymous Swap"
-msgstr "自动挂载未配置的Swap分区"
+msgstr "自动挂载未配置的 Swap 分区"
 
 msgid "Antenna 1"
 msgstr "天线 1"
@@ -370,27 +392,21 @@ 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 "已连接站点"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Qualcomm/Atheros 802.11%s 无线网卡"
-
 msgid "Auth Group"
 msgstr "认证组"
 
-msgid "AuthGroup"
-msgstr "认证组"
-
 msgid "Authentication"
 msgstr "认证"
 
@@ -398,7 +414,7 @@ msgid "Authentication Type"
 msgstr "认证类型"
 
 msgid "Authoritative"
-msgstr "授权的唯一DHCP服务器"
+msgstr "唯一授权"
 
 msgid "Authorization Required"
 msgstr "需要授权"
@@ -410,22 +426,22 @@ 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 "自动挂载磁盘"
 
 msgid "Automount Swap"
-msgstr "自动挂载Swap"
+msgstr "自动挂载 Swap"
 
 msgid "Available"
 msgstr "可用"
@@ -434,7 +450,7 @@ msgid "Available packages"
 msgstr "可用软件包"
 
 msgid "Average:"
-msgstr "平均:"
+msgstr "平均"
 
 msgid "B43 + B43C"
 msgstr "B43 + B43C"
@@ -463,9 +479,6 @@ msgstr "返回至概况"
 msgid "Back to scan results"
 msgstr "返回至扫描结果"
 
-msgid "Background Scan"
-msgstr "后台搜索"
-
 msgid "Backup / Flash Firmware"
 msgstr "备份/升级"
 
@@ -482,7 +495,7 @@ msgid "Band"
 msgstr "频宽"
 
 msgid "Behind NAT"
-msgstr "在NAT网络内"
+msgstr "在 NAT 网络内"
 
 msgid ""
 "Below is the determined list of files to backup. It consists of changed "
@@ -499,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 "传输速率"
@@ -520,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 "已缓冲"
@@ -537,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 "取消"
@@ -570,7 +583,7 @@ msgid "Check fileystems before mount"
 msgstr "在挂载前检查文件系统"
 
 msgid "Check this option to delete the existing networks from this radio."
-msgstr ""
+msgstr "选中此选项以从无线中删除现有网络。"
 
 msgid "Checksum"
 msgstr "校验值"
@@ -580,35 +593,39 @@ 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 "算法"
 
 msgid "Cisco UDP encapsulation"
-msgstr "Cisco UDP封装"
+msgstr "Cisco UDP 封装"
 
 msgid ""
 "Click \"Generate archive\" to download a tar archive of the current "
 "configuration files. To reset the firmware to its initial state, click "
 "\"Perform reset\" (only possible with squashfs images)."
-msgstr "备份/恢复当前系统配置文件或重置OpenWrt(仅squashfs固件有效)。"
+msgstr ""
+"点击“生成备份”下载当前配置文件的 tar 存档。要将固件恢复到初始状态,请单击“执"
+"行重置”(仅 squashfs 格式的固件有效)。"
 
 msgid "Client"
-msgstr "客户端Client"
+msgstr "客户端 Client"
 
 msgid "Client ID to send when requesting DHCP"
-msgstr "请求DHCP时发送的客户ID"
+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 "关闭列表..."
@@ -617,19 +634,23 @@ msgid "Collecting data..."
 msgstr "正在收集数据..."
 
 msgid "Command"
-msgstr "进程命令"
+msgstr "命令"
 
 msgid "Common Configuration"
-msgstr "一般置"
+msgstr "一般置"
 
-msgid "Compression"
-msgstr "压缩"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "配置"
 
 msgid "Configuration applied."
-msgstr "配置已应用"
+msgstr "配置已应用"
 
 msgid "Configuration files will be kept."
 msgstr "配置文件将被保留。"
@@ -647,10 +668,10 @@ msgid "Connection Limit"
 msgstr "连接数限制"
 
 msgid "Connection to server fails when TLS cannot be used"
-msgstr "当TLS不可用时连接到服务器失败"
+msgstr "当 TLS 不可用时,与服务器连接失败"
 
 msgid "Connections"
-msgstr "接"
+msgstr "接"
 
 msgid "Country"
 msgstr "国家"
@@ -665,7 +686,7 @@ msgid "Cover the following interfaces"
 msgstr "包括以下接口"
 
 msgid "Create / Assign firewall-zone"
-msgstr "创建/分配 防火墙区域"
+msgstr "创建/分配防火墙区域"
 
 msgid "Create Interface"
 msgstr "创建新接口"
@@ -677,60 +698,59 @@ msgid "Critical"
 msgstr "致命错误"
 
 msgid "Cron Log Level"
-msgstr "Cron日志级别"
+msgstr "Cron 日志级别"
 
 msgid "Custom Interface"
 msgstr "自定义接口"
 
 msgid "Custom delegated IPv6-prefix"
-msgstr "自定义分配的IPv6前缀"
+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分配"
+msgstr "DHCP 分配"
 
 msgid "DHCP Server"
-msgstr "DHCP服务器"
+msgstr "DHCP 服务器"
 
 msgid "DHCP and DNS"
 msgstr "DHCP/DNS"
 
 msgid "DHCP client"
-msgstr "DHCP客户端"
+msgstr "DHCP 客户端"
 
 msgid "DHCP-Options"
-msgstr "DHCP-选项"
+msgstr "DHCP 选项"
 
 msgid "DHCPv6 Leases"
-msgstr "DHCPv6分配"
+msgstr "DHCPv6 分配"
 
 msgid "DHCPv6 client"
-msgstr "DHCPv6客户端"
+msgstr "DHCPv6 客户端"
 
 msgid "DHCPv6-Mode"
-msgstr "DHCPv6模式"
+msgstr "DHCPv6 模式"
 
 msgid "DHCPv6-Service"
-msgstr "DHCPv6服务"
+msgstr "DHCPv6 服务"
 
 msgid "DNS"
 msgstr "DNS"
 
 msgid "DNS forwardings"
-msgstr "DNS转发"
+msgstr "DNS 转发"
 
 msgid "DNS-Label / FQDN"
 msgstr "DNS-Label / FQDN"
@@ -739,25 +759,25 @@ msgid "DNSSEC"
 msgstr "DNSSEC"
 
 msgid "DNSSEC check unsigned"
-msgstr "DNSSEC未签名检查"
+msgstr "DNSSEC 检查未签名"
 
 msgid "DPD Idle Timeout"
-msgstr "DPD空闲超时"
+msgstr "DPD 空闲超时"
 
 msgid "DS-Lite AFTR address"
-msgstr "DS-Lite AFTR地址"
+msgstr "DS-Lite AFTR 地址"
 
 msgid "DSL"
 msgstr "DSL"
 
 msgid "DSL Status"
-msgstr "DSL状态"
+msgstr "DSL 状态"
 
 msgid "DSL line mode"
-msgstr "DSL线路模式"
+msgstr "DSL 线路模式"
 
 msgid "DUID"
-msgstr "DUID (DHCP唯一标识符)"
+msgstr "DUID"
 
 msgid "Data Rate"
 msgstr "数据速率"
@@ -766,13 +786,13 @@ msgid "Debug"
 msgstr "调试"
 
 msgid "Default %d"
-msgstr "默认%d"
+msgstr "默认 %d"
 
 msgid "Default gateway"
 msgstr "默认网关"
 
 msgid "Default is stateless + stateful"
-msgstr "默认是无状态 + 有状态"
+msgstr "默认是无状态的 + 有状态的"
 
 msgid "Default route"
 msgstr "默认路由"
@@ -781,15 +801,15 @@ msgid "Default state"
 msgstr "默认状态"
 
 msgid "Define a name for this network."
-msgstr "为网络定义名称"
+msgstr "为网络定义名称"
 
 msgid ""
 "Define additional DHCP options, for example "
 "\"<code>6,192.168.2.1,192.168.2.2</code>\" which advertises different DNS "
 "servers to clients."
 msgstr ""
-"设置DHCP的附加选项,例如设定\"<code>6,192.168.2.1,192.168.2.2</code>\"表示通"
-"告不同的DNS服务器给客户端。"
+"设置 DHCP 的附加选项,例如设定 \"<code>6,192.168.2.1,192.168.2.2</code>\" 表"
+"示通告不同的 DNS 服务器给客户端。"
 
 msgid "Delete"
 msgstr "删除"
@@ -833,22 +853,24 @@ 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设定"
+msgstr "停用 DNS 设定"
 
 msgid "Disable Encryption"
 msgstr "禁用加密"
 
-msgid "Disable HW-Beacon timer"
-msgstr "停用HW-Beacon计时器"
-
 msgid "Disabled"
 msgstr "禁用"
 
+msgid "Disabled (default)"
+msgstr "禁用(默认)"
+
 msgid "Discard upstream RFC1918 responses"
-msgstr "丢弃RFC1918上行响应数据"
+msgstr "丢弃 RFC1918 上行响应数据"
 
 msgid "Displaying only packages containing"
 msgstr "只显示有内容的软件包"
@@ -857,32 +879,32 @@ msgid "Distance Optimization"
 msgstr "距离优化"
 
 msgid "Distance to farthest network member in meters."
-msgstr "最远客户端的距离(米)。"
+msgstr "最远网络用户的距离(米)。"
 
 msgid "Distribution feeds"
 msgstr "发行版软件源"
 
 msgid "Diversity"
-msgstr "å\88\86é\9b\86"
+msgstr "å·®å¼\82"
 
 msgid ""
 "Dnsmasq is a combined <abbr title=\"Dynamic Host Configuration Protocol"
 "\">DHCP</abbr>-Server and <abbr title=\"Domain Name System\">DNS</abbr>-"
 "Forwarder for <abbr title=\"Network Address Translation\">NAT</abbr> "
 "firewalls"
-msgstr "Dnsmasq为NAT防火墙提供了一个集成的DHCP服务器和DNS转发器"
+msgstr ""
+"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命令"
-
-msgid "Do not send probe responses"
-msgstr "不回送探测响应"
+msgstr "不转发本地网络的反向查询"
 
 msgid "Domain required"
 msgstr "忽略空域名解析"
@@ -891,12 +913,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 "不转发没有DNS名称的解析请求"
+msgstr ""
+"不转发没有 <abbr title=\"Domain Name System\">DNS</abbr> 名称的解析请求"
 
 msgid "Download and install package"
 msgstr "下载并安装软件包"
@@ -905,20 +928,20 @@ msgid "Download backup"
 msgstr "下载备份"
 
 msgid "Dropbear Instance"
-msgstr "Dropbear设置"
+msgstr "Dropbear 实例"
 
 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 "动态隧道"
@@ -926,13 +949,14 @@ msgstr "动态隧道"
 msgid ""
 "Dynamically allocate DHCP addresses for clients. If disabled, only clients "
 "having static leases will be served."
-msgstr "动态分配DHCP地址。如果禁用,则只能为静态租用表中的客户端提供网络服务。"
+msgstr ""
+"为所有客户端提供 DHCP 服务。如果禁用,将只对具有静态租约的客户提供服务。"
 
 msgid "EA-bits length"
-msgstr "EA长度"
+msgstr "EA-bits 长度"
 
 msgid "EAP-Method"
-msgstr "EAP类型"
+msgstr "EAP 类型"
 
 msgid "Edit"
 msgstr "修改"
@@ -940,7 +964,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 "修改此接口"
@@ -955,34 +979,37 @@ 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动态终端更新"
+msgstr "启用 HE.net 动态终端更新"
 
 msgid "Enable IPv6 negotiation"
-msgstr "启用IPv6协商"
+msgstr "启用 IPv6 协商"
 
 msgid "Enable IPv6 negotiation on the PPP link"
-msgstr "在PPP链路上启用IPv6协商"
+msgstr "在 PPP 链路上启用 IPv6 协商"
 
 msgid "Enable Jumbo Frame passthrough"
 msgstr "启用巨型帧透传"
 
 msgid "Enable NTP client"
-msgstr "启用NTP客户端"
+msgstr "启用 NTP 客户端"
 
 msgid "Enable Single DES"
-msgstr "启用单个DES"
+msgstr "启用单个 DES"
 
 msgid "Enable TFTP server"
-msgstr "启用TFTP服务器"
+msgstr "启用 TFTP 服务器"
 
 msgid "Enable VLAN functionality"
-msgstr "启用VLAN"
+msgstr "启用 VLAN"
 
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
-msgstr "启用WPS按键配置,要求使用WPA(2)-PSK"
+msgstr "启用 WPS 一键加密按钮,需要 WPA(2)-PSK"
+
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
 
 msgid "Enable learning and aging"
 msgstr "启用智能交换学习"
@@ -994,13 +1021,13 @@ 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\84DF(ç¦\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 "启用挂载点"
+msgstr "å\90¯ç\94¨æ­¤æ\8c\82è½½ç\82¹"
 
 msgid "Enable this swap"
-msgstr "启用交换区"
+msgstr "启用此 swap 分区"
 
 msgid "Enable/Disable"
 msgstr "启用/禁用"
@@ -1008,8 +1035,13 @@ msgstr "启用/禁用"
 msgid "Enabled"
 msgstr "启用"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr "启用属于同一移动域的接入点之间的快速漫游"
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
-msgstr "在此桥接上启用生成协议树"
+msgstr "在此桥接上启用生成树协议"
 
 msgid "Encapsulation mode"
 msgstr "封装模式"
@@ -1030,7 +1062,7 @@ msgid "Error"
 msgstr "错误"
 
 msgid "Errored seconds (ES)"
-msgstr "错误秒数(ES)"
+msgstr "错误秒数(ES)"
 
 msgid "Ethernet Adapter"
 msgstr "以太网适配器"
@@ -1042,32 +1074,35 @@ msgid "Exclude interfaces"
 msgstr "排除接口"
 
 msgid "Expand hosts"
-msgstr "扩展HOSTS文件中的主机后缀"
+msgstr "扩展 HOSTS 文件中的主机后缀"
 
 msgid "Expires"
 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 "远程"
+msgstr "外部"
+
+msgid "External R0 Key Holder List"
+msgstr "外部 <abbr title=\"R0 Key Holder\">R0KH</abbr> 列表"
+
+msgid "External R1 Key Holder List"
+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命令选项"
-
-msgid "Fast Frames"
-msgstr "快速帧"
+msgstr "额外的 SSH 命令选项"
 
 msgid "File"
 msgstr "文件"
@@ -1090,9 +1125,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 "搜索并加入网络"
@@ -1106,6 +1139,9 @@ msgstr "完成"
 msgid "Firewall"
 msgstr "防火墙"
 
+msgid "Firewall Mark"
+msgstr "防火墙标识"
+
 msgid "Firewall Settings"
 msgstr "防火墙设置"
 
@@ -1119,7 +1155,7 @@ msgid "Firmware Version"
 msgstr "固件版本"
 
 msgid "Fixed source port for outbound DNS queries"
-msgstr "指定的DNS查询源端口"
+msgstr "指定的 DNS 查询源端口"
 
 msgid "Flash Firmware"
 msgstr "刷新固件"
@@ -1137,31 +1173,34 @@ msgid "Flashing..."
 msgstr "刷写中..."
 
 msgid "Force"
-msgstr "强制开启DHCP"
+msgstr "强制"
 
 msgid "Force CCMP (AES)"
-msgstr "强制使用CCMP(AES)加密"
+msgstr "强制 CCMP(AES)"
 
 msgid "Force DHCP on this network even if another server is detected."
-msgstr "强å\88¶å¼\80å\90¯DHCP。"
+msgstr "å\8d³ä½¿æ£\80æµ\8bå\88°å\8f¦ä¸\80å\8f°æ\9c\8då\8a¡å\99¨ï¼\8cä¹\9fè¦\81强å\88¶ä½¿ç\94¨æ­¤ç½\91ç»\9cä¸\8aç\9a\84 DHCP。"
 
 msgid "Force TKIP"
-msgstr "强制使用TKIP加密"
+msgstr "强制 TKIP"
 
 msgid "Force TKIP and CCMP (AES)"
-msgstr "TKIP和CCMP(AES)混合加密"
+msgstr "强制 TKIP 和 CCMP(AES)"
+
+msgid "Force link"
+msgstr "强制链路"
 
 msgid "Force use of NAT-T"
-msgstr "强制使用NAT-T"
+msgstr "强制使用 NAT-T"
 
 msgid "Form token mismatch"
 msgstr "表单令牌不匹配"
 
 msgid "Forward DHCP traffic"
-msgstr "转发DHCP数据包"
+msgstr "转发 DHCP 数据包"
 
 msgid "Forward Error Correction Seconds (FECS)"
-msgstr "前向纠错秒数(FECS)"
+msgstr "前向纠错秒数(FECS)"
 
 msgid "Forward broadcast traffic"
 msgstr "转发广播数据包"
@@ -1185,14 +1224,14 @@ 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."
-"io</a>"
+"有关 WireGuard 接口和 Peer 的更多信息:<a href=\"http://wireguard.io"
+"\">wireguard.io</a>。"
 
 msgid "GHz"
 msgstr "GHz"
 
 msgid "GPRS only"
-msgstr "仅GPRS"
+msgstr "仅 GPRS"
 
 msgid "Gateway"
 msgstr "网关"
@@ -1207,7 +1246,7 @@ msgid "General Setup"
 msgstr "基本设置"
 
 msgid "General options for opkg"
-msgstr "Opkg基础配置"
+msgstr "OPKG 基础配置"
 
 msgid "Generate Config"
 msgstr "生成配置"
@@ -1216,7 +1255,7 @@ msgid "Generate archive"
 msgstr "生成备份"
 
 msgid "Generic 802.11%s Wireless Controller"
-msgstr "Generic 802.11%s 无线网卡"
+msgstr "通用 802.11%s 无线控制器"
 
 msgid "Given password confirmation did not match, password not changed!"
 msgstr "由于密码验证不匹配,密码没有更改!"
@@ -1240,13 +1279,13 @@ msgid "Guest"
 msgstr "访客"
 
 msgid "HE.net password"
-msgstr "HE.net密码"
+msgstr "HE.net 密码"
 
 msgid "HE.net username"
-msgstr "HE.net用户名"
+msgstr "HE.net 用户名"
 
 msgid "HT mode (802.11n)"
-msgstr "HT模式(802.11n)"
+msgstr "HT 模式(802.11n)"
 
 msgid "Handler"
 msgstr "处理程序"
@@ -1255,7 +1294,7 @@ msgid "Hang Up"
 msgstr "挂起"
 
 msgid "Header Error Code Errors (HEC)"
-msgstr "头错误代码错误(HEC)"
+msgstr "请求头错误代码错误(HEC)"
 
 msgid "Heartbeat"
 msgstr "心跳"
@@ -1268,13 +1307,13 @@ msgstr "配置路由器的部分基础信息。"
 msgid ""
 "Here you can paste public SSH-Keys (one per line) for SSH public-key "
 "authentication."
-msgstr "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 "主机"
@@ -1286,13 +1325,13 @@ 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 "主机名"
 
 msgid "Hostname to send when requesting DHCP"
-msgstr "请求DHCP时发送的主机名"
+msgstr "请求 DHCP 时发送的主机名"
 
 msgid "Hostnames"
 msgstr "主机名"
@@ -1301,52 +1340,52 @@ msgid "Hybrid"
 msgstr "混合"
 
 msgid "IKE DH Group"
-msgstr "IKE DH组"
+msgstr "IKE DH 组"
 
 msgid "IP Addresses"
-msgstr ""
+msgstr "IP 地址"
 
 msgid "IP address"
-msgstr "IP地址"
+msgstr "IP 地址"
 
 msgid "IPv4"
 msgstr "IPv4"
 
 msgid "IPv4 Firewall"
-msgstr "IPv4防火墙"
+msgstr "IPv4 防火墙"
 
 msgid "IPv4 WAN Status"
-msgstr "IPv4 WAN状态"
+msgstr "IPv4 WAN 状态"
 
 msgid "IPv4 address"
-msgstr "IPv4地址"
+msgstr "IPv4 地址"
 
 msgid "IPv4 and IPv6"
-msgstr "IPv4IPv6"
+msgstr "IPv4 和 IPv6"
 
 msgid "IPv4 assignment length"
-msgstr "分配IPv4长度"
+msgstr "分配 IPv4 长度"
 
 msgid "IPv4 broadcast"
-msgstr "IPv4广播"
+msgstr "IPv4 广播"
 
 msgid "IPv4 gateway"
-msgstr "IPv4网关"
+msgstr "IPv4 网关"
 
 msgid "IPv4 netmask"
-msgstr "IPv4子网掩码"
+msgstr "IPv4 子网掩码"
 
 msgid "IPv4 only"
-msgstr "仅IPv4"
+msgstr "仅 IPv4"
 
 msgid "IPv4 prefix"
-msgstr "IPv4地址前缀"
+msgstr "IPv4 地址前缀"
 
 msgid "IPv4 prefix length"
-msgstr "IPv4地址前缀长度"
+msgstr "IPv4 地址前缀长度"
 
 msgid "IPv4-Address"
-msgstr "IPv4-地址"
+msgstr "IPv4 地址"
 
 msgid "IPv4-in-IPv4 (RFC2003)"
 msgstr "IPv4-in-IPv4 (RFC2003)"
@@ -1355,49 +1394,55 @@ msgid "IPv6"
 msgstr "IPv6"
 
 msgid "IPv6 Firewall"
-msgstr "IPv6防火墙"
+msgstr "IPv6 防火墙"
 
 msgid "IPv6 Neighbours"
-msgstr "IPv6邻居"
+msgstr "IPv6 网上邻居"
 
 msgid "IPv6 Settings"
-msgstr "IPv6设置"
+msgstr "IPv6 设置"
 
 msgid "IPv6 ULA-Prefix"
-msgstr "IPv6 ULA前缀"
+msgstr "IPv6 ULA 前缀"
 
 msgid "IPv6 WAN Status"
-msgstr "IPv6 WAN状态"
+msgstr "IPv6 WAN 状态"
 
 msgid "IPv6 address"
-msgstr "IPv6地址"
+msgstr "IPv6 地址"
 
 msgid "IPv6 address delegated to the local tunnel endpoint (optional)"
-msgstr "绑定到本地隧道终点的IPv6地址(可选)"
+msgstr "绑定到隧道本端的 IPv6 地址(可选)"
 
 msgid "IPv6 assignment hint"
-msgstr "IPv6分配提示"
+msgstr "IPv6 分配提示"
 
 msgid "IPv6 assignment length"
-msgstr "IPv6分配长度"
+msgstr "IPv6 分配长度"
 
 msgid "IPv6 gateway"
-msgstr "IPv6网关"
+msgstr "IPv6 网关"
 
 msgid "IPv6 only"
-msgstr "仅IPv6"
+msgstr "仅 IPv6"
 
 msgid "IPv6 prefix"
-msgstr "IPv6地址前缀"
+msgstr "IPv6 地址前缀"
 
 msgid "IPv6 prefix length"
-msgstr "IPv6地址前缀长度"
+msgstr "IPv6 地址前缀长度"
 
 msgid "IPv6 routed prefix"
-msgstr "IPv6路由前缀"
+msgstr "IPv6 路由前缀"
+
+msgid "IPv6 suffix"
+msgstr "IPv6 后缀"
 
 msgid "IPv6-Address"
-msgstr "IPv6-地址"
+msgstr "IPv6 地址"
+
+msgid "IPv6-PD"
+msgstr "IPv6-PD"
 
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6-in-IPv4 (RFC4213)"
@@ -1411,26 +1456,26 @@ msgstr "IPv6-over-IPv4 (6to4)"
 msgid "Identity"
 msgstr "鉴权"
 
-msgid "If checked, 1DES is enaled"
-msgstr "选中以启用1DES"
+msgid "If checked, 1DES is enabled"
+msgstr "选中以启用 1DES"
 
 msgid "If checked, encryption is disabled"
 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 "留空则不配置默认路由"
 
 msgid "If unchecked, the advertised DNS server addresses are ignored"
-msgstr "留空则忽略所通告的DNS服务器地址"
+msgstr "留空则忽略所通告的 DNS 服务器地址"
 
 msgid ""
 "If your physical memory is insufficient unused data can be temporarily "
@@ -1438,13 +1483,17 @@ 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>"
 
 msgid "Ignore interface"
-msgstr "å\85³é\97­DHCP"
+msgstr "忽ç\95¥æ­¤æ\8e¥å\8f£"
 
 msgid "Ignore resolve file"
 msgstr "忽略解析文件"
@@ -1459,7 +1508,7 @@ 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"
@@ -1481,7 +1530,7 @@ msgid "Install"
 msgstr "安装"
 
 msgid "Install iputils-traceroute6 for IPv6 traceroute"
-msgstr "安装 iputils-traceroute6 以进行IPv6 traceroute"
+msgstr "安装 iputils-traceroute6 以进行 IPv6 路由追踪"
 
 msgid "Install package %q"
 msgstr "安装软件包 %q"
@@ -1495,6 +1544,9 @@ msgstr "已安装软件包"
 msgid "Interface"
 msgstr "接口"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr "接口设备 %q 从 %q 自动迁移到了 %q。"
+
 msgid "Interface Configuration"
 msgstr "接口配置"
 
@@ -1532,21 +1584,24 @@ msgid "Invalid"
 msgstr "无效"
 
 msgid "Invalid VLAN ID given! Only IDs between %d and %d are allowed."
-msgstr "无效的VLAN ID!只有 %d 和 %d 之间的ID有效。"
+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 "隔离客户端"
+
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
-msgstr "尝试刷写的固件与本路由器不兼容,请重新验证固件文件。"
+msgstr "尝试刷写的固件与本路由器不兼容,请重新验证固件文件。"
 
-msgid "Java Script required!"
-msgstr "需要Java Script!"
+msgid "JavaScript required!"
+msgstr "需要 JavaScript!"
 
 msgid "Join Network"
 msgstr "加入网络"
@@ -1579,13 +1634,13 @@ msgid "L2TP"
 msgstr "L2TP"
 
 msgid "L2TP Server"
-msgstr "L2TP服务器"
+msgstr "L2TP 服务器"
 
 msgid "LCP echo failure threshold"
-msgstr "LCP响应故障阈值"
+msgstr "LCP 响应故障阈值"
 
 msgid "LCP echo interval"
-msgstr "LCP响应间隔"
+msgstr "LCP 响应间隔"
 
 msgid "LLC"
 msgstr "LLC"
@@ -1603,7 +1658,7 @@ msgid "Latency"
 msgstr "延迟"
 
 msgid "Leaf"
-msgstr "叶"
+msgstr "叶节点"
 
 msgid "Lease time"
 msgstr "租期"
@@ -1614,9 +1669,6 @@ msgstr "有效租期"
 msgid "Leasefile"
 msgstr "租约文件"
 
-msgid "Leasetime"
-msgstr "租用时间"
-
 msgid "Leasetime remaining"
 msgstr "剩余租期"
 
@@ -1624,7 +1676,7 @@ msgid "Leave empty to autodetect"
 msgstr "留空则自动探测"
 
 msgid "Leave empty to use the current WAN address"
-msgstr "留空则使用当前WAN地址"
+msgstr "留空则使用当前 WAN 地址"
 
 msgid "Legend:"
 msgstr "图例:"
@@ -1633,13 +1685,13 @@ 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 "线路模式"
@@ -1656,13 +1708,37 @@ msgstr "活动链接"
 msgid ""
 "List of <abbr title=\"Domain Name System\">DNS</abbr> servers to forward "
 "requests to"
-msgstr "将指定的域名DNS解析转发到指定的DNS服务器(按照示例填写)"
+msgstr ""
+"将请求转发到的 <abbr title=\"Domain Name System\">DNS</abbr> 服务器列表"
+
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"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 地址。"
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"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 的列表。"
 
 msgid "List of SSH key files for auth"
-msgstr "用于认证的SSH密钥文件列表"
+msgstr "用于认证的 SSH 密钥文件列表"
 
 msgid "List of domains to allow RFC1918 responses for"
-msgstr "允许RFC1918响应的域名列表"
+msgstr "允许 RFC1918 响应的域名列表"
 
 msgid "List of hosts that supply bogus NX domain results"
 msgstr "允许虚假空域名响应的服务器列表"
@@ -1674,10 +1750,10 @@ msgid "Listen Port"
 msgstr "监听端口"
 
 msgid "Listen only on the given interface or, if unspecified, on all"
-msgstr "监听指定的接口;未指定则监听全部"
+msgstr "仅监听指定的接口,未指定则监听全部"
 
 msgid "Listening port for inbound DNS queries"
-msgstr "入站DNS查询端口"
+msgstr "入站 DNS 查询端口"
 
 msgid "Load"
 msgstr "负载"
@@ -1689,13 +1765,13 @@ msgid "Loading"
 msgstr "加载中"
 
 msgid "Local IP address to assign"
-msgstr "要分配的本地IP地址"
+msgstr "要分配的本地 IP 地址"
 
 msgid "Local IPv4 address"
-msgstr "本地IPv4地址"
+msgstr "本地 IPv4 地址"
 
 msgid "Local IPv6 address"
-msgstr "本地IPv6地址"
+msgstr "本地 IPv6 地址"
 
 msgid "Local Service Only"
 msgstr "仅本地服务"
@@ -1712,10 +1788,10 @@ msgstr "本地域名"
 msgid ""
 "Local domain specification. Names matching this domain are never forwarded "
 "and are resolved from DHCP or hosts files only"
-msgstr "本地域名规则。与此域匹配的名称从不转发,仅从DHCP或HOSTS文件解析"
+msgstr "本地域名规则。与此域匹配的名称从不转发,仅从 DHCP 或 HOSTS 文件解析"
 
 msgid "Local domain suffix appended to DHCP names and hosts file entries"
-msgstr "本地域名后缀将添加到DHCP和HOSTS文件条目"
+msgstr "本地域名后缀将添加到 DHCP 和 HOSTS 文件条目"
 
 msgid "Local server"
 msgstr "本地服务器"
@@ -1723,7 +1799,7 @@ msgstr "本地服务器"
 msgid ""
 "Localise hostname depending on the requesting subnet if multiple IPs are "
 "available"
-msgstr "如果有多个IP可用,则根据请求来源的子网来本地化主机名"
+msgstr "如果有多个 IP 可用,则根据请求来源的子网来本地化主机名"
 
 msgid "Localise queries"
 msgstr "本地化查询"
@@ -1735,7 +1811,7 @@ msgid "Log output level"
 msgstr "日志记录等级"
 
 msgid "Log queries"
-msgstr "日志查询"
+msgstr "记录查询日志"
 
 msgid "Logging"
 msgstr "日志"
@@ -1747,22 +1823,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"
@@ -1782,28 +1858,25 @@ 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)"
-
-msgid "Maximum Rate"
-msgstr "最高速率"
+msgstr "最大可达数据速率(ATTNDR)"
 
 msgid "Maximum allowed number of active DHCP leases"
-msgstr "允许的最大DHCP租用数"
+msgstr "允许的最大 DHCP 租用数"
 
 msgid "Maximum allowed number of concurrent DNS queries"
-msgstr "允许的最大并发DNS查询数"
+msgstr "允许的最大并发 DNS 查询数"
 
 msgid "Maximum allowed size of EDNS.0 UDP packets"
-msgstr "允许的最大EDNS.0 UDP数据包大小"
+msgstr "允许的最大 EDNS.0 UDP 数据包大小"
 
 msgid "Maximum amount of seconds to wait for the modem to become ready"
-msgstr "调制解调器就绪的最大等待时间(秒)"
+msgstr "调制解调器就绪的最大等待时间(秒)"
 
 msgid "Maximum hold time"
 msgstr "最大持续时间"
@@ -1812,7 +1885,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 "最大地址分配数量。"
@@ -1824,14 +1898,11 @@ msgid "Memory"
 msgstr "内存"
 
 msgid "Memory usage (%)"
-msgstr "内存使用率(%)"
+msgstr "内存使用率(%)"
 
 msgid "Metric"
 msgstr "跃点数"
 
-msgid "Minimum Rate"
-msgstr "最低速率"
-
 msgid "Minimum hold time"
 msgstr "最低持续时间"
 
@@ -1844,6 +1915,9 @@ msgstr "数据包镜像源端口"
 msgid "Missing protocol extension for proto %q"
 msgstr "缺少协议 %q 的协议扩展"
 
+msgid "Mobility Domain"
+msgstr "移动域"
+
 msgid "Mode"
 msgstr "模式"
 
@@ -1857,7 +1931,7 @@ msgid "Modem init timeout"
 msgstr "调制解调器初始化超时"
 
 msgid "Monitor"
-msgstr "监听Monitor"
+msgstr "监听"
 
 msgid "Mount Entry"
 msgstr "挂载项目"
@@ -1869,15 +1943,15 @@ msgid "Mount Points"
 msgstr "挂载点"
 
 msgid "Mount Points - Mount Entry"
-msgstr "挂载点-存储区"
+msgstr "挂载点 - 存储区"
 
 msgid "Mount Points - Swap Entry"
-msgstr "挂载点-交换区"
+msgstr "挂载点 - 交换区"
 
 msgid ""
 "Mount Points define at which point a memory device will be attached to the "
 "filesystem"
-msgstr "配置存储设备挂载到文件系统中的位置和参数"
+msgstr "配置存储设备挂载到文件系统中的位置和参数"
 
 msgid "Mount filesystems not specifically configured"
 msgstr "自动挂载未专门配置挂载点的分区"
@@ -1889,7 +1963,7 @@ msgid "Mount point"
 msgstr "挂载点"
 
 msgid "Mount swap not specifically configured"
-msgstr "自动挂载未专门配置的Swap分区"
+msgstr "自动挂载未专门配置的 swap 分区"
 
 msgid "Mounted file systems"
 msgstr "已挂载的文件系统"
@@ -1900,9 +1974,6 @@ msgstr "下移"
 msgid "Move up"
 msgstr "上移"
 
-msgid "Multicast Rate"
-msgstr "多播速率"
-
 msgid "Multicast address"
 msgstr "多播地址"
 
@@ -1910,22 +1981,25 @@ msgid "NAS ID"
 msgstr "NAS ID"
 
 msgid "NAT-T Mode"
-msgstr "NAT-T模式"
+msgstr "NAT-T 模式"
 
 msgid "NAT64 Prefix"
-msgstr "NAT64前缀"
+msgstr "NAT64 前缀"
+
+msgid "NCM"
+msgstr "NCM"
 
 msgid "NDP-Proxy"
-msgstr "NDP-代理"
+msgstr "NDP 代理"
 
 msgid "NT Domain"
-msgstr "NT域"
+msgstr "NT 域"
 
 msgid "NTP server candidates"
-msgstr "候选NTP服务器"
+msgstr "候选 NTP 服务器"
 
 msgid "NTP sync time-out"
-msgstr "NTP同步超时"
+msgstr "NTP 同步超时"
 
 msgid "Name"
 msgstr "名称"
@@ -1958,10 +2032,10 @@ msgid "Next »"
 msgstr "下一步 »"
 
 msgid "No DHCP Server configured for this interface"
-msgstr "本接口未配置DHCP服务器"
+msgstr "本接口未配置 DHCP 服务器"
 
 msgid "No NAT-T"
-msgstr "无NAT-T"
+msgstr "无 NAT-T"
 
 msgid "No chains in this table"
 msgstr "本表中没有链"
@@ -1997,16 +2071,16 @@ 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 "非通配符"
+msgstr "非全部地址"
 
 msgid "None"
 msgstr "无"
@@ -2039,13 +2113,13 @@ msgid "OK"
 msgstr "确认"
 
 msgid "OPKG-Configuration"
-msgstr "OPKG-配置"
+msgstr "OPKG 配置"
 
 msgid "Obfuscated Group Password"
-msgstr ""
+msgstr "混淆组密码"
 
 msgid "Obfuscated Password"
-msgstr ""
+msgstr "混淆密码"
 
 msgid "Off-State Delay"
 msgstr "关闭时间"
@@ -2057,7 +2131,11 @@ msgid ""
 "<abbr title=\"Virtual Local Area Network\">VLAN</abbr> notation "
 "<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: "
 "<samp>eth0.1</samp>)."
-msgstr "配置网络接口信息。"
+msgstr ""
+"在此页面,您可以配置网络接口。您可以勾选“桥接接口”,并输入由空格分隔的多个网"
+"络接口的名称来桥接多个接口。接口名称中可以使用 <abbr title=\"Virtual Local "
+"Area Network\">VLAN</abbr> 记号 <samp>INTERFACE.VLANNR</samp>(例如:"
+"<samp>eth0.1</samp>)。"
 
 msgid "On-State Delay"
 msgstr "通电时间"
@@ -2078,7 +2156,7 @@ msgid "Open list..."
 msgstr "打开列表..."
 
 msgid "OpenConnect (CISCO AnyConnect)"
-msgstr "开放连接(CISCO AnyConnect)"
+msgstr "OpenConnect (CISCO AnyConnect)"
 
 msgid "Operating frequency"
 msgstr "工作频率"
@@ -2089,43 +2167,59 @@ msgstr "修改的选项"
 msgid "Option removed"
 msgstr "移除的选项"
 
+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账号拥有一个以上的隧道请设置此项."
+msgstr "可选,如果您的 SIXXS 账号拥有一个以上的隧道请设置此项"
 
-msgid "Optional."
-msgstr "可选"
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
+msgstr ""
+"可选,传出加密数据包的 32 位标记。请输入十六进制值,以 <code>0x</code> 开头。"
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 编码的预共享密钥。"
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
-msgstr "可选,为此Peer创建允许IP的路由。"
+msgstr "可选,为此 Peer 创建允许 IP 的路由。"
 
 msgid ""
 "Optional. Host of peer. Names are resolved prior to bringing up the "
 "interface."
-msgstr ""
+msgstr "可选,Peer 的主机。"
 
 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端口。"
+msgstr "可选,用于传出和传入数据包的 UDP 端口。"
 
 msgid "Options"
 msgstr "选项"
@@ -2139,37 +2233,34 @@ msgstr "出口"
 msgid "Outbound:"
 msgstr "出站:"
 
-msgid "Outdoor Channels"
-msgstr "户外频道"
-
 msgid "Output Interface"
 msgstr "网络出口"
 
 msgid "Override MAC address"
-msgstr "克隆MAC地址"
+msgstr "重设 MAC 地址"
 
 msgid "Override MTU"
-msgstr "更新MTU"
+msgstr "重设 MTU"
 
 msgid "Override TOS"
-msgstr "更新TOS"
+msgstr "重设 TOS"
 
 msgid "Override TTL"
-msgstr "更新TTL"
+msgstr "重设 TTL"
 
 msgid "Override default interface name"
-msgstr "更新默认接口名称"
+msgstr "重设默认接口名称"
 
 msgid "Override the gateway in DHCP responses"
-msgstr "更新DHCP响应网关"
+msgstr "重设 DHCP 响应网关"
 
 msgid ""
 "Override the netmask sent to clients. Normally it is calculated from the "
 "subnet that is served."
-msgstr "更新发送到客户端的子网掩码。"
+msgstr "重设发送到客户端的子网掩码。"
 
 msgid "Override the table used for internal routes"
-msgstr "更新内部路由表"
+msgstr "重设内部路由表"
 
 msgid "Overview"
 msgstr "总览"
@@ -2178,10 +2269,10 @@ msgid "Owner"
 msgstr "用户名"
 
 msgid "PAP/CHAP password"
-msgstr "PAP/CHAP密码"
+msgstr "PAP/CHAP 密码"
 
 msgid "PAP/CHAP username"
-msgstr "PAP/CHAP用户名"
+msgstr "PAP/CHAP 用户名"
 
 msgid "PID"
 msgstr "PID"
@@ -2189,11 +2280,14 @@ msgstr "PID"
 msgid "PIN"
 msgstr "PIN"
 
+msgid "PMK R1 Push"
+msgstr "PMK R1 Push"
+
 msgid "PPP"
 msgstr "PPP"
 
 msgid "PPPoA Encapsulation"
-msgstr "PPPoA封包"
+msgstr "PPPoA 封包"
 
 msgid "PPPoATM"
 msgstr "PPPoATM"
@@ -2208,19 +2302,19 @@ msgid "PPtP"
 msgstr "PPtP"
 
 msgid "PSID offset"
-msgstr "PSID偏移"
+msgstr "PSID 偏移"
 
 msgid "PSID-bits length"
-msgstr "PSID长度"
+msgstr "PSID-bits 长度"
 
 msgid "PTM/EFM (Packet Transfer Mode)"
-msgstr "PTM/EFM(分组传输模式)"
+msgstr "PTM/EFM(分组传输模式)"
 
 msgid "Package libiwinfo required!"
 msgstr "需要 libiwinfo 软件包!"
 
 msgid "Package lists are older than 24 hours"
-msgstr "软件包列表已超过24小时未更新"
+msgstr "软件包列表已超过 24 小时未更新"
 
 msgid "Package name"
 msgstr "软件包名称"
@@ -2246,8 +2340,11 @@ msgstr "内部私钥的密码"
 msgid "Password successfully changed!"
 msgstr "密码修改成功!"
 
+msgid "Password2"
+msgstr "密码 2"
+
 msgid "Path to CA-Certificate"
-msgstr "CA证书路径"
+msgstr "CA 证书路径"
 
 msgid "Path to Client-Certificate"
 msgstr "客户端证书路径"
@@ -2259,7 +2356,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 "内部客户端证书的路径"
@@ -2268,10 +2365,10 @@ msgid "Path to inner Private Key"
 msgstr "内部私钥的路径"
 
 msgid "Peak:"
-msgstr "峰值:"
+msgstr "峰值"
 
 msgid "Peer IP address to assign"
-msgstr "要分配的Peer IP地址"
+msgstr "要分配的 Peer IP 地址"
 
 msgid "Peers"
 msgstr "Peers"
@@ -2283,13 +2380,13 @@ msgid "Perform reboot"
 msgstr "执行重启"
 
 msgid "Perform reset"
-msgstr "执行复位"
+msgstr "执行重置"
 
 msgid "Persistent Keep Alive"
-msgstr "持续Keep-Alive"
+msgstr "持续 Keep-Alive"
 
 msgid "Phy Rate:"
-msgstr "物理速率:"
+msgstr "物理速率"
 
 msgid "Physical Settings"
 msgstr "物理设置"
@@ -2316,7 +2413,16 @@ 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"
+
+msgid "Prefer UMTS"
+msgstr "首选 UMTS"
+
+msgid "Prefix Delegated"
+msgstr "分发前缀"
 
 msgid "Preshared Key"
 msgstr "预共享密钥"
@@ -2324,16 +2430,16 @@ msgstr "预共享密钥"
 msgid ""
 "Presume peer to be dead after given amount of LCP echo failures, use 0 to "
 "ignore failures"
-msgstr "在指定数量的LCP响应故障后假定链路已断开,0为忽略故障"
+msgstr "在指定数量的 LCP 响应故障后假定链路已断开,0 为忽略故障"
 
 msgid "Prevent listening on these interfaces."
-msgstr "防止监听这些接口。"
+msgstr "监听这些接口。"
 
 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 "私钥"
@@ -2363,13 +2469,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 "公钥"
@@ -2378,16 +2484,22 @@ msgid "Public prefix routed to this device for distribution to clients."
 msgstr "分配到此设备的公共前缀,用以分发到客户端。"
 
 msgid "QMI Cellular"
-msgstr "QMI蜂窝"
+msgstr "QMI 蜂窝"
 
 msgid "Quality"
 msgstr "质量"
 
+msgid "R0 Key Lifetime"
+msgstr "R0 Key Lifetime"
+
+msgid "R1 Key Holder"
+msgstr "R1 Key Holder"
+
 msgid "RFC3947 NAT-T mode"
-msgstr "RFC3947 NAT-T模式"
+msgstr "RFC3947 NAT-T 模式"
 
 msgid "RTS/CTS Threshold"
-msgstr "RTS/CTS阈值"
+msgstr "RTS/CTS 阈值"
 
 msgid "RX"
 msgstr "接收"
@@ -2396,7 +2508,7 @@ msgid "RX Rate"
 msgstr "接收速率"
 
 msgid "RaLink 802.11%s Wireless Controller"
-msgstr "MediaTek/RaLink 802.11%s 无线网卡"
+msgstr "RaLink 802.11%s 无线控制器"
 
 msgid "Radius-Accounting-Port"
 msgstr "Radius 计费端口"
@@ -2420,8 +2532,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=\"Dynamic Host Configuration "
-"Protocol\">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 "
@@ -2443,14 +2555,14 @@ msgid ""
 "Really shut down network?\\nYou might lose access to this device if you are "
 "connected via this interface."
 msgstr ""
-"确定要关闭此网络?\\n如果正在使用此接口连接路由器,关闭此网络可能导致连接断"
+"确定要关闭此网络?\\n如果正在使用此接口连接路由器,关闭此网络可能导致连接断"
 "开!"
 
 msgid ""
 "Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
 "you are connected via this interface."
 msgstr ""
-"确定要关闭接口 \"%s\"?\\n如果正在使用此接口连接路由器,关闭此网络可能导致"
+"确定要关闭接口 \"%s\"?\\n如果正在使用此接口连接路由器,关闭此网络可能导致"
 "连接断开!"
 
 msgid "Really switch protocol?"
@@ -2471,6 +2583,9 @@ msgstr "实时流量"
 msgid "Realtime Wireless"
 msgstr "实时无线"
 
+msgid "Reassociation Deadline"
+msgstr "重关联截止时间"
+
 msgid "Rebind protection"
 msgstr "重绑定保护"
 
@@ -2490,7 +2605,7 @@ msgid "Receiver Antenna"
 msgstr "接收天线"
 
 msgid "Recommended. IP addresses of the WireGuard interface."
-msgstr ""
+msgstr "推荐,Wire Guard 接口的 IP 地址。"
 
 msgid "Reconnect this interface"
 msgstr "重连此接口"
@@ -2501,9 +2616,6 @@ msgstr "重连接口中..."
 msgid "References"
 msgstr "引用"
 
-msgid "Regulatory Domain"
-msgstr "无线网络国家区域"
-
 msgid "Relay"
 msgstr "中继"
 
@@ -2517,10 +2629,10 @@ msgid "Relay bridge"
 msgstr "中继桥"
 
 msgid "Remote IPv4 address"
-msgstr "远程IPv4地址"
+msgstr "远程 IPv4 地址"
 
 msgid "Remote IPv4 address or FQDN"
-msgstr "远程IPv4地址或FQDN"
+msgstr "远程 IPv4 地址或 FQDN"
 
 msgid "Remove"
 msgstr "移除"
@@ -2535,35 +2647,45 @@ msgid "Replace wireless configuration"
 msgstr "重置无线配置"
 
 msgid "Request IPv6-address"
-msgstr "请求IPv6地址"
+msgstr "请求 IPv6 地址"
 
 msgid "Request IPv6-prefix of length"
-msgstr "请求指定长度的IPv6前缀"
+msgstr "请求指定长度的 IPv6 前缀"
 
 msgid "Require TLS"
-msgstr "必须使用TLS"
+msgstr "必须使用 TLS"
+
+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编码私钥。"
+msgstr "必须,此接口的 Base64 编码私钥。"
+
+msgid "Required. Base64-encoded public key of peer."
+msgstr "必须,Peer 的 Base64 编码公钥。"
 
 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 ""
-"必须,允许该Peer在隧道中使用的IP地址和前缀,通常是该Peer的隧道IP地址和通过隧"
-"道的路由网络。"
+"必须,允许该 Peer 在隧道中使用的 IP 地址和前缀,通常是该 Peer 的隧道 IP 地址"
+"和通过隧道的路由网络。"
 
-msgid "Required. Public key of peer."
-msgstr "必须,Peer的公钥。"
+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.02,已知支持"
+"此特性的驱动有 ath9k、ath10k,以及 LEDE 中的 mwlwifi 和 mt76)"
 
 msgid ""
 "Requires upstream supports DNSSEC; verify unsigned domain responses really "
 "come from unsigned domains"
-msgstr "需要上级支持DNSSEC,验证未签名的域响应确实是来自未签名的域。"
+msgstr "需要上级支持 DNSSEC,验证未签名的响应确实是来自未签名的域名"
 
 msgid "Reset"
 msgstr "复位"
@@ -2575,7 +2697,7 @@ msgid "Reset to defaults"
 msgstr "恢复到出厂设置"
 
 msgid "Resolv and Hosts Files"
-msgstr "HOSTS和解析文件"
+msgstr "HOSTS 和解析文件"
 
 msgid "Resolve file"
 msgstr "解析文件"
@@ -2599,22 +2721,22 @@ msgid "Root"
 msgstr "Root"
 
 msgid "Root directory for files served via TFTP"
-msgstr "TFTP服务器的根目录"
+msgstr "TFTP 服务器的根目录"
 
 msgid "Root preparation"
-msgstr ""
+msgstr "根目录准备"
 
 msgid "Route Allowed IPs"
-msgstr "路由允许的IP"
+msgstr "路由允许的 IP"
 
 msgid "Route type"
 msgstr "路由类型"
 
 msgid "Routed IPv6 prefix for downstream interfaces"
-msgstr "下行接口的路由IPv6前缀"
+msgstr "下行接口的路由 IPv6 前缀"
 
 msgid "Router Advertisement-Service"
-msgstr "路由器广告服务"
+msgstr "路由告服务"
 
 msgid "Router Password"
 msgstr "主机密码"
@@ -2639,28 +2761,28 @@ 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 ""
+msgstr "SIXXS-handle[/Tunnel-ID]"
 
 msgid "SNR"
 msgstr "SNR"
 
 msgid "SSH Access"
-msgstr "SSH访问"
+msgstr "SSH 访问"
 
 msgid "SSH server address"
-msgstr "SSH服务器地址"
+msgstr "SSH 服务器地址"
 
 msgid "SSH server port"
-msgstr "SSH服务器端口"
+msgstr "SSH 服务器端口"
 
 msgid "SSH username"
-msgstr "SSH用户名"
+msgstr "SSH 用户名"
 
 msgid "SSH-Keys"
-msgstr "SSH-密钥"
+msgstr "SSH 密钥"
 
 msgid "SSID"
 msgstr "SSID"
@@ -2675,16 +2797,16 @@ msgid "Save &#38; Apply"
 msgstr "保存&#38;应用"
 
 msgid "Scan"
-msgstr "æ\90\9cç´¢"
+msgstr "æ\89«æ\8f\8f"
 
 msgid "Scheduled Tasks"
 msgstr "计划任务"
 
 msgid "Section added"
-msgstr "添加的区域"
+msgstr "添加的节点"
 
 msgid "Section removed"
-msgstr "移除的区域"
+msgstr "移除的节点"
 
 msgid "See \"mount\" manpage for details"
 msgstr "详参 \"mount\" 联机帮助"
@@ -2692,14 +2814,11 @@ 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 "隔离客户端"
 
-msgid "Separate WDS"
-msgstr "隔离WDS"
-
 msgid "Server Settings"
 msgstr "服务器设置"
 
@@ -2709,7 +2828,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 "服务器用户名"
@@ -2723,20 +2842,27 @@ msgstr "服务类型"
 msgid "Services"
 msgstr "服务"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+"不管接口的链路状态如何,总是用应用设置(如果勾选,链路状态变更将不再触发 "
+"hotplug 事件处理)。"
+
 msgid "Set up Time Synchronization"
 msgstr "设置时间同步"
 
 msgid "Setup DHCP Server"
-msgstr "配置DHCP服务器"
+msgstr "配置 DHCP 服务器"
 
 msgid "Severely Errored Seconds (SES)"
-msgstr "严重误码秒(SES)"
+msgstr "严重误码秒(SES)"
 
 msgid "Short GI"
-msgstr ""
+msgstr "Short GI"
 
 msgid "Show current backup file list"
-msgstr "显示当前文件备份列表"
+msgstr "显示当前备份文件列表"
 
 msgid "Shutdown this interface"
 msgstr "关闭此接口"
@@ -2748,16 +2874,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 "跳过"
@@ -2775,7 +2901,7 @@ msgid "Software"
 msgstr "软件包"
 
 msgid "Software VLAN"
-msgstr ""
+msgstr "软件 VLAN"
 
 msgid "Some fields are invalid, cannot save values!"
 msgstr "一些项目的值无效,无法保存!"
@@ -2791,8 +2917,8 @@ msgid ""
 "flashed manually. Please refer to the wiki for device specific install "
 "instructions."
 msgstr ""
-"抱歉,您的设备暂不支持Sysupgrade升级,需手动更新固件。请参考Wiki中关于此设备"
-"的固件更新说明。"
+"抱歉,您的设备暂不支持 sysupgrade 升级,需手动更新固件。请参考 Wiki 中关于此"
+"设备的固件更新说明。"
 
 msgid "Sort"
 msgstr "排序"
@@ -2810,35 +2936,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 "开始"
 
@@ -2849,10 +2974,10 @@ msgid "Startup"
 msgstr "启动项"
 
 msgid "Static IPv4 Routes"
-msgstr "静态IPv4路由"
+msgstr "静态 IPv4 路由"
 
 msgid "Static IPv6 Routes"
-msgstr "静态IPv6路由"
+msgstr "静态 IPv6 路由"
 
 msgid "Static Leases"
 msgstr "静态地址分配"
@@ -2860,9 +2985,6 @@ msgstr "静态地址分配"
 msgid "Static Routes"
 msgstr "静态路由"
 
-msgid "Static WDS"
-msgstr "静态WDS"
-
 msgid "Static address"
 msgstr "静态地址"
 
@@ -2871,8 +2993,8 @@ msgid ""
 "to DHCP clients. They are also required for non-dynamic interface "
 "configurations where only hosts with a corresponding lease are served."
 msgstr ""
-"静态租约用于给DHCP客户端分配固定的IP地址和主机标识。只有指定的主机才能连接,"
-"并且接口须为非动态配置。"
+"静态租约用于给 DHCP 客户端分配固定的 IP 地址和主机标识。只有指定的主机才能连"
+"接,并且接口须为非动态配置。"
 
 msgid "Status"
 msgstr "状态"
@@ -2893,10 +3015,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 "交换机"
@@ -2905,14 +3027,14 @@ 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交换机"
+msgstr "交换机 VLAN"
 
 msgid "Switch protocol"
 msgstr "切换协议"
@@ -2936,13 +3058,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 "发送"
@@ -2962,7 +3084,6 @@ msgstr "目标网络"
 msgid "Terminate"
 msgstr "关闭"
 
-#, fuzzy
 msgid ""
 "The <em>Device Configuration</em> section covers physical settings of the "
 "radio hardware such as channel, transmit power or antenna selection which "
@@ -2970,27 +3091,27 @@ 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 "
 "username instead of the user ID!"
-msgstr "HE.net客户端更新设置已经被改变,您现在必须使用用户名代替用户ID/"
+msgstr "HE.net 客户端更新设置已经被改变,您现在必须使用用户名代替用户 ID!"
 
 msgid ""
 "The IPv4 address or the fully-qualified domain name of the remote tunnel end."
-msgstr "远程隧道端的IPv4地址或完整域名。"
+msgstr "远程隧道端的 IPv4 地址或完整域名。"
 
 msgid ""
 "The IPv6 prefix assigned to the provider, usually ends with <code>::</code>"
-msgstr "运营商特定的IPv6前缀,通常以<code>::</code>为结尾"
+msgstr "运营商特定的 IPv6 前缀,通常以 <code>::</code> 为结尾"
 
 msgid ""
 "The allowed characters are: <code>A-Z</code>, <code>a-z</code>, <code>0-9</"
@@ -3005,21 +3126,23 @@ 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 ""
-"ç\94¨äº\8eæ ¼å¼\8få\8c\96å­\98å\82¨å\99¨ç\9a\84æ\96\87件系ç»\9fï¼\8c(ä¾\8bå¦\82ï¼\9a<samp><abbr title=\"第ä¸\89代æ\89©å±\95æ\96\87件系ç»\9f"
-"\">ext3</abbr></samp>)"
+"ç\94¨äº\8eæ ¼å¼\8få\8c\96å­\98å\82¨å\99¨ç\9a\84æ\96\87件系ç»\9fï¼\88ä¾\8bå¦\82ï¼\9a<samp><abbr title=\"Third Extended "
+"Filesystem\">ext3</abbr></samp>)"
 
 msgid ""
 "The flash image was uploaded. Below is the checksum and file size listed, "
 "compare them with the original file to ensure data integrity.<br /> Click "
 "\"Proceed\" below to start the flash procedure."
-msgstr "固件已上传,请注意核对文件大小和校验值!<br />刷新过程切勿断电!"
+msgstr ""
+"固件已上传,请注意核对文件大小和校验值!<br />点击下面的“继续”开始刷写,刷新"
+"过程中切勿断电!"
 
 msgid "The following changes have been committed"
 msgstr "以下更改已提交"
@@ -3028,7 +3151,7 @@ msgid "The following changes have been reverted"
 msgstr "以下更改已放弃"
 
 msgid "The following rules are currently active on this system."
-msgstr "系统中的活跃连接。"
+msgstr "以下规则当前在系统中处于活动状态。"
 
 msgid "The given network name is not unique"
 msgstr "给定的网络名重复"
@@ -3036,18 +3159,18 @@ msgstr "给定的网络名重复"
 msgid ""
 "The hardware is not multi-SSID capable and the existing configuration will "
 "be replaced if you proceed."
-msgstr "本机的硬件不支持多SSID,如果继续,现有配置将被替换。"
+msgstr "本机的硬件不支持多 SSID,如果继续,现有配置将被替换。"
 
 msgid ""
 "The length of the IPv4 prefix in bits, the remainder is used in the IPv6 "
 "addresses."
-msgstr "bit格式的IPv4前缀长度, 其余的用在IPv6地址."
+msgstr "IPv4 前缀长度(bit),其余的用在 IPv6 地址。"
 
 msgid "The length of the IPv6 prefix in bits"
-msgstr "bit格式的IPv6前缀长度"
+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="
@@ -3057,9 +3180,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 "所选的协议需要分配设备"
@@ -3070,7 +3194,7 @@ msgstr "提交的安全令牌无效或已过期!"
 msgid ""
 "The system is erasing the configuration partition now and will reboot itself "
 "when finished."
-msgstr "系统正在除配置分区,完成后会自动重启。"
+msgstr "系统正在除配置分区,完成后会自动重启。"
 
 msgid ""
 "The system is flashing now.<br /> DO NOT POWER OFF THE DEVICE!<br /> Wait a "
@@ -3079,17 +3203,17 @@ msgid ""
 "settings."
 msgstr ""
 "正在刷新系统...<br />切勿关闭电源! DO NOT POWER OFF THE DEVICE!<br />等待数分"
-"钟后即可尝试重新连接到路由。您可能需要更改计算机的IP地址以重新连接。"
+"钟后即可尝试重新连接到路由。您可能需要更改计算机的 IP 地址以重新连接。"
 
 msgid ""
 "The tunnel end-point is behind NAT, defaults to disabled and only applies to "
 "AYIYA"
-msgstr "隧道端点在NAT之后,默认为禁用,仅适用于AYIYA"
+msgstr "隧道端点在 NAT 之后,默认为禁用,仅适用于 AYIYA"
 
 msgid ""
 "The uploaded image file does not contain a supported format. Make sure that "
 "you choose the generic image format for your platform."
-msgstr "ä¸\8dæ\94¯æ\8c\81æ\89\80ä¸\8aä¼ ç\9a\84æ\96\87件格å¼\8fã\80\82请确认é\80\89æ\8b©ç\9a\84æ\96\87件æ\97 è¯¯。"
+msgstr "ä¸\8dæ\94¯æ\8c\81æ\89\80ä¸\8aä¼ ç\9a\84æ\98 å\83\8fæ\96\87件格å¼\8fï¼\8c请é\80\89æ\8b©é\80\82å\90\88å½\93å\89\8då¹³å\8f°ç\9a\84é\80\9aç\94¨æ\98 å\83\8fæ\96\87件。"
 
 msgid "There are no active leases."
 msgstr "没有已分配的租约。"
@@ -3111,65 +3235,67 @@ 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地址"
+msgstr "中继的 IPv4 地址"
 
 msgid ""
 "This file may contain lines like 'server=/domain/1.2.3.4' or "
 "'server=1.2.3.4' fordomain-specific or full upstream <abbr title=\"Domain "
 "Name System\">DNS</abbr> servers."
 msgstr ""
-"æ­¤æ\96\87件å\8f¯è\83½å\8c\85å\90«ç±»ä¼¼'server=/domain/1.2.3.4'æ\88\96'server=1.2.3.4'ç\9a\84è¡\8cï¼\8cæ\9d¥è§£æ\9e\90ç\89¹å®\9a"
-"域名或指定上游<abbr title=\"域名服务系统\">DNS</abbr>服务器。"
+"æ­¤æ\96\87件å\8c\85å\90«ç±»ä¼¼äº\8e 'server=/domain/1.2.3.4' æ\88\96 'server=1.2.3.4' ç\9a\84è¡\8cï¼\8cç\94¨äº\8e解æ\9e\90"
+"特定域名或指定上游 <abbr title=\"Domain Name System\">DNS</abbr> 服务器。"
 
 msgid ""
 "This is a list of shell glob patterns for matching files and directories to "
 "include during sysupgrade. Modified files in /etc/config/ and certain other "
 "configurations are automatically preserved."
 msgstr ""
-"系统升级时要保存的配置文件和目录的清单。目录/etc/config/内修改过的文件以及部"
-"分其他配置会被自动保存。"
+"系统升级时要保存的配置文件和目录的清单。目录 /etc/config/ 内修改过的文件以及"
+"分其他配置会被自动保存。"
 
 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 "
 "front of 'exit 0') to execute them at the end of the boot process."
-msgstr "启动脚本插入到'exit 0'之前即可随系统启动运行。"
+msgstr "启动脚本插入到 'exit 0' 之前即可随系统启动运行。"
 
 msgid ""
 "This is the local endpoint address assigned by the tunnel broker, it usually "
 "ends with <code>:2</code>"
-msgstr "隧道代理分配的本地终端地址,通常以<code>:2</code>结尾"
+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 "登录账户时填写的用户名"
 
 msgid ""
 "This is the prefix routed to you by the tunnel broker for use by clients"
-msgstr "这是隧道代理分配给的路由前缀,供客户端使用"
+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"
-msgstr "这通常是隧道代理所管理的最近的PoP的地址"
+msgstr "这通常是隧道代理所管理的最近的 PoP 的地址"
 
 msgid ""
 "This list gives an overview over currently running system processes and "
 "their status."
-msgstr "系统中正在运行的进程和其状态信息。"
+msgstr "系统中正在运行的进程概况和它们的状态信息。"
 
 msgid "This page allows the configuration of custom button actions"
 msgstr "自定义按键动作。"
@@ -3195,7 +3321,7 @@ msgid ""
 msgstr "上传备份存档以恢复配置。"
 
 msgid "Tone"
-msgstr ""
+msgstr "Tone"
 
 msgid "Total Available"
 msgstr "可用数"
@@ -3222,13 +3348,13 @@ msgid "Transmitter Antenna"
 msgstr "传送天线"
 
 msgid "Trigger"
-msgstr "触发"
+msgstr "触发"
 
 msgid "Trigger Mode"
 msgstr "触发模式"
 
 msgid "Tunnel ID"
-msgstr "隧道ID"
+msgstr "隧道 ID"
 
 msgid "Tunnel Interface"
 msgstr "隧道接口"
@@ -3245,9 +3371,6 @@ msgstr "隧道配置服务器"
 msgid "Tunnel type"
 msgstr "隧道类型"
 
-msgid "Turbo Mode"
-msgstr "Turbo模式"
-
 msgid "Tx-Power"
 msgstr "传输功率"
 
@@ -3255,19 +3378,19 @@ 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"
 
 msgid "USB Device"
-msgstr "USB设备"
+msgstr "USB 设备"
 
 msgid "USB Ports"
-msgstr ""
+msgstr "USB 接口"
 
 msgid "UUID"
 msgstr "UUID"
@@ -3276,7 +3399,7 @@ msgid "Unable to dispatch"
 msgstr "无法调度"
 
 msgid "Unavailable Seconds (UAS)"
-msgstr "不可用秒数(UAS)"
+msgstr "不可用秒数(UAS)"
 
 msgid "Unknown"
 msgstr "未知"
@@ -3303,7 +3426,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 "上传备份..."
@@ -3315,37 +3440,37 @@ msgid "Uptime"
 msgstr "运行时间"
 
 msgid "Use <code>/etc/ethers</code>"
-msgstr "使用<code>/etc/ethers</code>配置"
+msgstr "使用 <code>/etc/ethers</code> 配置"
 
 msgid "Use DHCP gateway"
-msgstr "使用DHCP网关"
+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国家代码。"
+msgstr "参考 ISO/IEC 3166 alpha2 国家代码。"
 
 msgid "Use MTU on tunnel interface"
-msgstr "隧道接口的MTU"
+msgstr "隧道接口的 MTU"
 
 msgid "Use TTL on tunnel interface"
-msgstr "隧道接口的TTL"
+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 "使用广播标签"
 
 msgid "Use builtin IPv6-management"
-msgstr "使用内置的IPv6管理"
+msgstr "使用内置的 IPv6 管理"
 
 msgid "Use custom DNS servers"
-msgstr "使用自定义的DNS服务器"
+msgstr "使用自定义的 DNS 服务器"
 
 msgid "Use default gateway"
 msgstr "使用默认网关"
@@ -3363,8 +3488,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 "已用"
@@ -3372,11 +3498,18 @@ msgstr "已用"
 msgid "Used Key Slot"
 msgstr "启用密码组"
 
+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 不需"
+"要。"
+
 msgid "User certificate (PEM encoded)"
-msgstr "客户证书(PEM加密的)"
+msgstr "用户证书(PEM)"
 
 msgid "User key (PEM encoded)"
-msgstr "客户Key(PEM加密的)"
+msgstr "用户密钥(PEM)"
 
 msgid "Username"
 msgstr "用户名"
@@ -3388,40 +3521,40 @@ msgid "VDSL"
 msgstr "VDSL"
 
 msgid "VLANs on %q"
-msgstr "%q 上的VLAN"
+msgstr "%q 上的 VLAN"
 
 msgid "VLANs on %q (%s)"
-msgstr "%q (%s) 上的VLAN"
+msgstr "%q(%s)上的 VLAN"
 
 msgid "VPN Local address"
-msgstr "VPN本地地址"
+msgstr "VPN 本地地址"
 
 msgid "VPN Local port"
-msgstr "VPN本地端口"
+msgstr "VPN 本地端口"
 
 msgid "VPN Server"
-msgstr "VPN服务器"
+msgstr "VPN 服务器"
 
 msgid "VPN Server port"
-msgstr "VPN服务器端口"
+msgstr "VPN 服务器端口"
 
 msgid "VPN Server's certificate SHA1 hash"
-msgstr "VPN服务器证书的SHA1哈希值"
+msgstr "VPN 服务器证书的 SHA1 哈希值"
 
 msgid "VPNC (CISCO 3000 (and others) VPN)"
-msgstr "VPNC (CISCO 3000 和其他VPN)"
+msgstr "VPNC(CISCO 3000 和其他 VPN)"
 
 msgid "Vendor"
-msgstr ""
+msgstr "Vendor"
 
 msgid "Vendor Class to send when requesting DHCP"
-msgstr "请求DHCP时发送的Vendor Class"
+msgstr "请求 DHCP 时发送的 Vendor Class 选项"
 
 msgid "Verbose"
 msgstr "详细"
 
 msgid "Verbose logging by aiccu daemon"
-msgstr "aiccu守护程序详细日志"
+msgstr "Aiccu 守护程序详细日志"
 
 msgid "Verify"
 msgstr "验证"
@@ -3433,36 +3566,36 @@ msgid "WDS"
 msgstr "WDS"
 
 msgid "WEP Open System"
-msgstr "WEP开放认证"
+msgstr "WEP 开放式系统"
 
 msgid "WEP Shared Key"
-msgstr "WEP共享密钥"
+msgstr "WEP 共享密钥"
 
 msgid "WEP passphrase"
-msgstr "WEP密钥"
+msgstr "WEP 密钥"
 
 msgid "WMM Mode"
-msgstr "WMM多媒体加速"
+msgstr "WMM 模式"
 
 msgid "WPA passphrase"
-msgstr "WPA密钥"
+msgstr "WPA 密钥"
 
 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 "等待设备..."
@@ -3471,10 +3604,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 "是否仅路由来自分发前缀的数据包"
@@ -3483,7 +3616,7 @@ msgid "Width"
 msgstr "频宽"
 
 msgid "WireGuard VPN"
-msgstr ""
+msgstr "WireGuard VPN"
 
 msgid "Wireless"
 msgstr "无线"
@@ -3501,10 +3634,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 "无线已禁用"
@@ -3519,33 +3652,30 @@ msgid "Wireless shut down"
 msgstr "无线已关闭"
 
 msgid "Write received DNS requests to syslog"
-msgstr "将收到的DNS请求写入系统日志"
+msgstr "将收到的 DNS 请求写入系统日志"
 
 msgid "Write system log to file"
 msgstr "将系统日志写入文件"
 
-msgid "XR Support"
-msgstr "XR支持"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "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ï¼\9aå¦\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 Java Script in your browser or LuCI will not work properly."
-msgstr "LUCI的正常运行需要开启浏览器的Java Script支持。"
+"You must enable JavaScript in your browser or LuCI will not work properly."
+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 "任意"
@@ -3553,9 +3683,6 @@ msgstr "任意"
 msgid "auto"
 msgstr "自动"
 
-msgid "automatic"
-msgstr "自动"
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3563,7 +3690,7 @@ msgid "bridged"
 msgstr "桥接的"
 
 msgid "create:"
-msgstr "创建:"
+msgstr "创建"
 
 msgid "creates a bridge over specified interface(s)"
 msgstr "为指定接口创建桥接"
@@ -3586,7 +3713,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 "转发"
@@ -3622,16 +3751,16 @@ 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"
+msgstr "最小值 1280,最大值 1480"
 
-msgid "navigation Navigation"
-msgstr "导è\88ª"
+msgid "minutes"
+msgstr "å\88\86é\92\9f"
 
 msgid "no"
-msgstr ""
+msgstr ""
 
 msgid "no link"
 msgstr "未连接"
@@ -3663,12 +3792,6 @@ msgstr "已路由"
 msgid "server mode"
 msgstr "服务器模式"
 
-msgid "skiplink1 Skip to navigation"
-msgstr "skiplink1 跳转到导航"
-
-msgid "skiplink2 Skip to content"
-msgstr "skiplink2 跳到内容"
-
 msgid "stateful-only"
 msgstr "有状态的"
 
@@ -3676,10 +3799,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 "已关联"
+
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr "时间单位(TUs / 1.024ms)[1000-65535]"
 
 msgid "unknown"
 msgstr "未知"
@@ -3691,10 +3817,10 @@ msgid "unspecified"
 msgstr "未指定"
 
 msgid "unspecified -or- create:"
-msgstr "未指定或创建:"
+msgstr "不指定或新建:"
 
 msgid "untagged"
-msgstr "关联"
+msgstr "关联"
 
 msgid "yes"
 msgstr "是"
@@ -3702,6 +3828,78 @@ 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 支持"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Qualcomm/Atheros 802.11%s 无线控制器"
+
+#~ msgid "Background Scan"
+#~ msgstr "后台搜索"
+
+#~ msgid "Compression"
+#~ msgstr "压缩"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "停用 HW-Beacon 计时器"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "不回送探测响应"
+
+#~ msgid "Fast Frames"
+#~ msgstr "快速帧"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "最高速率"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "最低速率"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "多播速率"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "户外频道"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "无线网络国家区域"
+
+#~ msgid "Separate WDS"
+#~ msgstr "隔离 WDS"
+
+#~ msgid "Static WDS"
+#~ msgstr "静态 WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "Turbo 模式"
+
+#~ msgid "XR Support"
+#~ msgstr "XR 支持"
+
+#~ msgid "Required. Public key of peer."
+#~ msgstr "必须,Peer 的公钥。"
+
 #~ msgid "An additional network will be created if you leave this checked."
 #~ msgstr "如果选中此复选框,则会创建一个附加网络。"
 
@@ -3718,7 +3916,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 316d03c..214e9cd 100644 (file)
@@ -50,12 +50,36 @@ msgstr "1分鐘負載"
 msgid "15 Minute Load:"
 msgstr "15分鐘負載"
 
+msgid "4-character hexadecimal ID"
+msgstr ""
+
 msgid "464XLAT (CLAT)"
 msgstr ""
 
 msgid "5 Minute Load:"
 msgstr "5分鐘負載"
 
+msgid "6-octet identifier as a hex string - no colons"
+msgstr ""
+
+msgid "802.11r Fast Transition"
+msgstr ""
+
+msgid "802.11w Association SA Query maximum timeout"
+msgstr ""
+
+msgid "802.11w Association SA Query retry timeout"
+msgstr ""
+
+msgid "802.11w Management Frame Protection"
+msgstr ""
+
+msgid "802.11w maximum timeout"
+msgstr ""
+
+msgid "802.11w retry timeout"
+msgstr ""
+
 msgid "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 msgstr "<abbr title=\"Basic Service Set Identifier\">BSSID</abbr>"
 
@@ -123,6 +147,11 @@ msgstr "<abbr title=\"maximal\">最大</abbr>並發查詢數"
 msgid "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 msgstr "<abbr title='Pairwise: %s / Group: %s'>%s - %s</abbr>"
 
+msgid ""
+"<br/>Note: you need to manually restart the cron service if the crontab file "
+"was empty before editing."
+msgstr ""
+
 msgid "A43C + J43 + A43"
 msgstr ""
 
@@ -141,9 +170,6 @@ msgstr ""
 msgid "APN"
 msgstr "APN"
 
-msgid "AR Support"
-msgstr "AR支援"
-
 msgid "ARP retry threshold"
 msgstr "ARP重試門檻"
 
@@ -381,15 +407,9 @@ msgstr ""
 msgid "Associated Stations"
 msgstr "已連接站點"
 
-msgid "Atheros 802.11%s Wireless Controller"
-msgstr "Atheros 802.11%s 無線控制器"
-
 msgid "Auth Group"
 msgstr ""
 
-msgid "AuthGroup"
-msgstr ""
-
 msgid "Authentication"
 msgstr "認證"
 
@@ -462,9 +482,6 @@ msgstr "返回至總覽"
 msgid "Back to scan results"
 msgstr "返回至掃描結果"
 
-msgid "Background Scan"
-msgstr "背景搜尋"
-
 msgid "Backup / Flash Firmware"
 msgstr "備份/升級韌體"
 
@@ -580,14 +597,14 @@ msgid ""
 "fill out the <em>create</em> field to define a new zone and attach the "
 "interface to it."
 msgstr ""
-"選擇要指定給這介面的防火牆區. 撿選<em>unspecified</em>以便從指定區域除這個"
+"選擇要指定給這介面的防火牆區. 撿選<em>unspecified</em>以便從指定區域除這個"
 "介面或者填寫<em>create</em>欄以便定義附加這個介面到一個新的區域上."
 
 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>create</em> 以便定義一個新的"
+"選擇要附加到無線網路介面的多個網路或者填寫<em>create</em> 以便定義一個新的"
 "網路."
 
 msgid "Cipher"
@@ -627,8 +644,12 @@ msgstr "指令"
 msgid "Common Configuration"
 msgstr "一般設定"
 
-msgid "Compression"
-msgstr "壓縮"
+msgid ""
+"Complicates key reinstallation attacks on the client side by disabling "
+"retransmission of EAPOL-Key frames that are used to install keys. This "
+"workaround might cause interoperability issues and reduced robustness of key "
+"negotiation especially in environments with heavy traffic load."
+msgstr ""
 
 msgid "Configuration"
 msgstr "設定"
@@ -848,12 +869,12 @@ msgstr "關閉DNS設置"
 msgid "Disable Encryption"
 msgstr ""
 
-msgid "Disable HW-Beacon timer"
-msgstr "關閉硬體燈號計時器"
-
 msgid "Disabled"
 msgstr "關閉"
 
+msgid "Disabled (default)"
+msgstr ""
+
 msgid "Discard upstream RFC1918 responses"
 msgstr "丟棄上游RFC1918 虛擬IP網路的回應"
 
@@ -891,9 +912,6 @@ msgstr "對不被公用名稱伺服器回應的請求不轉發"
 msgid "Do not forward reverse lookups for local networks"
 msgstr "對本地網域不轉發反解析鎖定"
 
-msgid "Do not send probe responses"
-msgstr "不傳送探測回應"
-
 msgid "Domain required"
 msgstr "網域必要的"
 
@@ -996,6 +1014,9 @@ msgstr "啟用VLAN功能"
 msgid "Enable WPS pushbutton, requires WPA(2)-PSK"
 msgstr ""
 
+msgid "Enable key reinstallation (KRACK) countermeasures"
+msgstr ""
+
 msgid "Enable learning and aging"
 msgstr "啟用智慧學習功能"
 
@@ -1020,6 +1041,11 @@ msgstr "啟用/關閉"
 msgid "Enabled"
 msgstr "啟用"
 
+msgid ""
+"Enables fast roaming among access points that belong to the same Mobility "
+"Domain"
+msgstr ""
+
 msgid "Enables the Spanning Tree Protocol on this bridge"
 msgstr "在橋接器上啟用802.1d Spanning Tree協定"
 
@@ -1067,6 +1093,12 @@ msgstr "釋放位址的過期週期,最少兩分鐘 (<code>2m</code>)."
 msgid "External"
 msgstr ""
 
+msgid "External R0 Key Holder List"
+msgstr ""
+
+msgid "External R1 Key Holder List"
+msgstr ""
+
 msgid "External system log server"
 msgstr "外部系統日誌伺服器"
 
@@ -1079,9 +1111,6 @@ msgstr ""
 msgid "Extra SSH command options"
 msgstr ""
 
-msgid "Fast Frames"
-msgstr "快速迅框群"
-
 msgid "File"
 msgstr "檔案"
 
@@ -1117,6 +1146,9 @@ msgstr "完成"
 msgid "Firewall"
 msgstr "防火牆"
 
+msgid "Firewall Mark"
+msgstr ""
+
 msgid "Firewall Settings"
 msgstr "防火牆設定"
 
@@ -1162,6 +1194,9 @@ msgstr "強制TKIP加密"
 msgid "Force TKIP and CCMP (AES)"
 msgstr "強制TKIP+CCMP (AES)加密"
 
+msgid "Force link"
+msgstr ""
+
 msgid "Force use of NAT-T"
 msgstr ""
 
@@ -1405,9 +1440,15 @@ msgstr "IPv6字首長度"
 msgid "IPv6 routed prefix"
 msgstr ""
 
+msgid "IPv6 suffix"
+msgstr ""
+
 msgid "IPv6-Address"
 msgstr "IPv6-位址"
 
+msgid "IPv6-PD"
+msgstr ""
+
 msgid "IPv6-in-IPv4 (RFC4213)"
 msgstr "IPv6包覆在IPv4內(RFC4213)"
 
@@ -1420,7 +1461,7 @@ msgstr "IPv6凌駕IPv4外(6轉4)"
 msgid "Identity"
 msgstr "特性"
 
-msgid "If checked, 1DES is enaled"
+msgid "If checked, 1DES is enabled"
 msgstr ""
 
 msgid "If checked, encryption is disabled"
@@ -1448,7 +1489,7 @@ msgid ""
 "slow process as the swap-device cannot be accessed with the high datarates "
 "of the <abbr title=\"Random Access Memory\">RAM</abbr>."
 msgstr ""
-"如果的物理內存不足時,未使用的數據可以是暫時交換到導致更高的交換設備量的可用"
+"如果的物理內存不足時,未使用的數據可以是暫時交換到導致更高的交換設備量的可用"
 "<abbr title=\"Random Access Memory\">RAM</abbr>內.請注意,交換數據是一個非常"
 "緩慢的過程,作為交換裝置不能用高數據速率訪問該<abbr title=\"Random Access "
 "Memory\">RAM</縮寫>"
@@ -1506,6 +1547,9 @@ msgstr "安裝軟體包"
 msgid "Interface"
 msgstr "介面"
 
+msgid "Interface %q device auto-migrated from %q to %q."
+msgstr ""
+
 msgid "Interface Configuration"
 msgstr "介面設定"
 
@@ -1551,13 +1595,16 @@ msgstr "打入的是不正確的VLAN ID!僅有獨一無二的IDs被允許"
 msgid "Invalid username and/or password! Please try again."
 msgstr "不正確的用戶名稱和/或者密碼!請再試一次."
 
+msgid "Isolate Clients"
+msgstr ""
+
 #, fuzzy
 msgid ""
 "It appears that you are trying to flash an image that does not fit into the "
 "flash memory, please verify the image file!"
-msgstr "它顯示正嘗試更新不適用於這個flash記憶體的映像檔,請檢查確認這個映像檔"
+msgstr "它顯示正嘗試更新不適用於這個flash記憶體的映像檔,請檢查確認這個映像檔"
 
-msgid "Java Script required!"
+msgid "JavaScript required!"
 msgstr "需要Java腳本"
 
 msgid "Join Network"
@@ -1626,9 +1673,6 @@ msgstr "租賃有效時間"
 msgid "Leasefile"
 msgstr "租賃檔案"
 
-msgid "Leasetime"
-msgstr "租賃時間"
-
 msgid "Leasetime remaining"
 msgstr "租賃保留時間"
 
@@ -1670,6 +1714,22 @@ msgid ""
 "requests to"
 msgstr "列出 <abbr title=\"Domain Name System\">DNS</abbr> 伺服器以便轉發請求"
 
+msgid ""
+"List of R0KHs in the same Mobility Domain. <br />Format: MAC-address,NAS-"
+"Identifier,128-bit key as hex string. <br />This list is used to map R0KH-ID "
+"(NAS Identifier) to a destination MAC address when requesting PMK-R1 key "
+"from the R0KH that the STA used during the Initial Mobility Domain "
+"Association."
+msgstr ""
+
+msgid ""
+"List of R1KHs in the same Mobility Domain. <br />Format: MAC-address,R1KH-ID "
+"as 6 octets with colons,128-bit key as hex string. <br />This list is used "
+"to map R1KH-ID to a destination MAC address when sending PMK-R1 key from the "
+"R0KH. This is also the list of authorized R1KHs in the MD that can request "
+"PMK-R1 keys."
+msgstr ""
+
 msgid "List of SSH key files for auth"
 msgstr ""
 
@@ -1803,9 +1863,6 @@ msgstr ""
 msgid "Max. Attainable Data Rate (ATTNDR)"
 msgstr ""
 
-msgid "Maximum Rate"
-msgstr "最快速度"
-
 msgid "Maximum allowed number of active DHCP leases"
 msgstr "允許啟用DHCP釋放的最大數量"
 
@@ -1841,9 +1898,6 @@ msgstr "記憶體使用 (%)"
 msgid "Metric"
 msgstr "公測單位"
 
-msgid "Minimum Rate"
-msgstr "最低速度"
-
 msgid "Minimum hold time"
 msgstr "可持有的最低時間"
 
@@ -1856,6 +1910,9 @@ msgstr ""
 msgid "Missing protocol extension for proto %q"
 msgstr "協定  %q 漏失的延伸協定"
 
+msgid "Mobility Domain"
+msgstr ""
+
 msgid "Mode"
 msgstr "模式"
 
@@ -1912,9 +1969,6 @@ msgstr "往下移"
 msgid "Move up"
 msgstr "往上移"
 
-msgid "Multicast Rate"
-msgstr "多點群播速度"
-
 msgid "Multicast address"
 msgstr "多點群播位址"
 
@@ -1927,6 +1981,9 @@ msgstr ""
 msgid "NAT64 Prefix"
 msgstr ""
 
+msgid "NCM"
+msgstr ""
+
 msgid "NDP-Proxy"
 msgstr ""
 
@@ -2070,8 +2127,8 @@ msgid ""
 "<samp>INTERFACE.VLANNR</samp> (<abbr title=\"for example\">e.g.</abbr>: "
 "<samp>eth0.1</samp>)."
 msgstr ""
-"在這個頁面可以設定網路介面. 只要點下這個\"介面群橋接\"而且打入數個以空格分"
-"開網路介面的名稱就可以橋接數個介面群. 也可以使用<abbr title=\"Virtual "
+"在這個頁面可以設定網路介面. 只要點下這個\"介面群橋接\"而且打入數個以空格分"
+"開網路介面的名稱就可以橋接數個介面群. 也可以使用<abbr title=\"Virtual "
 "Local Area Network\">VLAN</abbr> 符號<samp>INTERFACE.VLANNR</samp> (<abbr "
 "title=\"for example\">例.如</abbr>: <samp>eth0.1</samp>)."
 
@@ -2105,18 +2162,30 @@ msgstr "選項已變更"
 msgid "Option removed"
 msgstr "選項已移除"
 
+msgid "Optional"
+msgstr ""
+
 msgid "Optional, specify to override default server (tic.sixxs.net)"
 msgstr ""
 
 msgid "Optional, use when the SIXXS account has more than one tunnel"
 msgstr ""
 
-msgid "Optional."
+msgid ""
+"Optional. 32-bit mark for outgoing encrypted packets. Enter value in hex, "
+"starting with <code>0x</code>."
 msgstr ""
 
 msgid ""
-"Optional. Adds in an additional layer of symmetric-key cryptography for post-"
-"quantum resistance."
+"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 ""
 
 msgid "Optional. Create routes for Allowed IPs for this peer."
@@ -2153,9 +2222,6 @@ msgstr "出"
 msgid "Outbound:"
 msgstr "外連:"
 
-msgid "Outdoor Channels"
-msgstr "室外通道"
-
 msgid "Output Interface"
 msgstr ""
 
@@ -2203,6 +2269,9 @@ msgstr "PID碼"
 msgid "PIN"
 msgstr "PIN碼"
 
+msgid "PMK R1 Push"
+msgstr ""
+
 msgid "PPP"
 msgstr "PPP協定"
 
@@ -2260,6 +2329,9 @@ msgstr ""
 msgid "Password successfully changed!"
 msgstr "密碼已變更成功!"
 
+msgid "Password2"
+msgstr ""
+
 msgid "Path to CA-Certificate"
 msgstr "CA-證書的路徑"
 
@@ -2315,7 +2387,7 @@ msgid "Pkts."
 msgstr "封包數."
 
 msgid "Please enter your username and password."
-msgstr "請輸入的用戶名稱和密碼"
+msgstr "請輸入的用戶名稱和密碼"
 
 msgid "Policy"
 msgstr "策略"
@@ -2332,6 +2404,15 @@ msgstr ""
 msgid "Pre-emtive CRC errors (CRCP_P)"
 msgstr ""
 
+msgid "Prefer LTE"
+msgstr ""
+
+msgid "Prefer UMTS"
+msgstr ""
+
+msgid "Prefix Delegated"
+msgstr ""
+
 msgid "Preshared Key"
 msgstr ""
 
@@ -2397,6 +2478,12 @@ msgstr ""
 msgid "Quality"
 msgstr "品質"
 
+msgid "R0 Key Lifetime"
+msgstr ""
+
+msgid "R1 Key Holder"
+msgstr ""
+
 msgid "RFC3947 NAT-T mode"
 msgstr ""
 
@@ -2442,14 +2529,14 @@ msgid ""
 "lose access to this device if you are connected via this interface."
 msgstr ""
 "真的要刪除這介面?無法復元刪除!\n"
-"假如你要透過這個介面連線你可能會無法存取這個設備."
+"假如您要透過這個介面連線您可能會無法存取這個設備."
 
 msgid ""
 "Really delete this wireless network? The deletion cannot be undone!\\nYou "
 "might lose access to this device if you are connected via this network."
 msgstr ""
 "真的要刪除這個無線網路?無法復元的刪除!\n"
-"假如你是透過這個網路連線你可能會無法存取這個設備."
+"假如您是透過這個網路連線您可能會無法存取這個設備."
 
 msgid "Really reset all changes?"
 msgstr "確定要重置回復原廠?"
@@ -2460,14 +2547,14 @@ msgid ""
 "connected via this interface."
 msgstr ""
 "真的要刪除這個網路 ?\n"
-"假如你是透過這個介面連線你可能會無法存取這個設備."
+"假如您是透過這個介面連線您可能會無法存取這個設備."
 
 msgid ""
 "Really shutdown interface \"%s\" ?\\nYou might lose access to this device if "
 "you are connected via this interface."
 msgstr ""
 "真的要關閉這個介面 \"%s\" ?!\n"
-"假如你要透過這個介面連線你可能會無法存取這個設備."
+"假如您要透過這個介面連線您可能會無法存取這個設備."
 
 msgid "Really switch protocol?"
 msgstr "確定要更換協定?"
@@ -2487,6 +2574,9 @@ msgstr "即時流量"
 msgid "Realtime Wireless"
 msgstr "即時無線網路"
 
+msgid "Reassociation Deadline"
+msgstr ""
+
 msgid "Rebind protection"
 msgstr "重新綁護"
 
@@ -2497,7 +2587,7 @@ msgid "Rebooting..."
 msgstr "重開中..."
 
 msgid "Reboots the operating system of your device"
-msgstr "重啟設備的作業系統"
+msgstr "重啟設備的作業系統"
 
 msgid "Receive"
 msgstr "接收"
@@ -2517,9 +2607,6 @@ msgstr "重連這個介面中"
 msgid "References"
 msgstr "引用"
 
-msgid "Regulatory Domain"
-msgstr "監管網域"
-
 msgid "Relay"
 msgstr "延遲"
 
@@ -2559,19 +2646,27 @@ msgstr ""
 msgid "Require TLS"
 msgstr ""
 
+msgid "Required"
+msgstr ""
+
 msgid "Required for certain ISPs, e.g. Charter with DOCSIS 3"
 msgstr "對特定的ISP需要,例如.DOCSIS 3 加速有線電視寬頻網路"
 
 msgid "Required. Base64-encoded private key for this interface."
 msgstr ""
 
+msgid "Required. Base64-encoded public key of peer."
+msgstr ""
+
 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 ""
 
-msgid "Required. Public key of peer."
+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 ""
 
 msgid ""
@@ -2711,9 +2806,6 @@ msgstr "傳送LCP呼叫請求在這個給予的秒數間隔內, 僅影響關聯
 msgid "Separate Clients"
 msgstr "分隔用戶端"
 
-msgid "Separate WDS"
-msgstr "分隔WDS中繼"
-
 msgid "Server Settings"
 msgstr "伺服器設定值"
 
@@ -2737,6 +2829,11 @@ msgstr "服務型態"
 msgid "Services"
 msgstr "各服務"
 
+msgid ""
+"Set interface properties regardless of the link carrier (If set, carrier "
+"sense events do not invoke hotplug handlers)."
+msgstr ""
+
 #, fuzzy
 msgid "Set up Time Synchronization"
 msgstr "安裝校時同步"
@@ -2796,7 +2893,7 @@ msgid "Some fields are invalid, cannot save values!"
 msgstr "有些欄位失效, 無法儲存數值!"
 
 msgid "Sorry, the object you requested was not found."
-msgstr "抱歉, 請求的這物件尚無發現."
+msgstr "抱歉, 請求的這物件尚無發現."
 
 msgid "Sorry, the server encountered an unexpected error."
 msgstr "抱歉, 伺服器遭遇非預期的錯誤."
@@ -2874,9 +2971,6 @@ msgstr "靜態租約"
 msgid "Static Routes"
 msgstr "靜態路由"
 
-msgid "Static WDS"
-msgstr "靜態WDS"
-
 msgid "Static address"
 msgstr "靜態位址"
 
@@ -2929,7 +3023,7 @@ msgid "Switch VLAN"
 msgstr ""
 
 msgid "Switch protocol"
-msgstr "交換器協定"
+msgstr "切換協定"
 
 msgid "Sync with browser"
 msgstr "同步瀏覽器"
@@ -2993,7 +3087,7 @@ msgid ""
 "The <em>libiwinfo-lua</em> package is not installed. You must install this "
 "component for working wireless configuration!"
 msgstr ""
-"這 <em>libiwinfo-lua</em> 軟體包尚未安裝. 必須安裝這個元件以便無線網路設定"
+"這 <em>libiwinfo-lua</em> 軟體包尚未安裝. 必須安裝這個元件以便無線網路設定"
 "有作用."
 
 msgid ""
@@ -3058,7 +3152,7 @@ msgstr "輸入的網路名稱非獨一"
 msgid ""
 "The hardware is not multi-SSID capable and the existing configuration will "
 "be replaced if you proceed."
-msgstr "如果繼續的話.這硬體並非多SSID工能並且已存的設定將會被覆蓋."
+msgstr "如果繼續的話.這硬體並非多SSID工能並且已存的設定將會被覆蓋."
 
 msgid ""
 "The length of the IPv4 prefix in bits, the remainder is used in the IPv6 "
@@ -3102,8 +3196,8 @@ msgid ""
 "address of your computer to reach the device again, depending on your "
 "settings."
 msgstr ""
-"系統現正刷機中.<br /> 請勿關閉設備!<br />  等待數分鐘直到重新在連線. 可能需"
-"要更新你電腦的位址以便再連設備, 端看你的設定. "
+"系統現正刷機中.<br /> 請勿關閉設備!<br />  等待數分鐘直到重新在連線. 可能需"
+"要更新您電腦的位址以便再連設備, 端看您的設定. "
 
 msgid ""
 "The tunnel end-point is behind NAT, defaults to disabled and only applies to "
@@ -3114,7 +3208,7 @@ msgid ""
 "The uploaded image file does not contain a supported format. Make sure that "
 "you choose the generic image format for your platform."
 msgstr ""
-"以上傳的映像檔不包含支援格式. 請確認你選擇的是針對你的平台採用的通用映像檔."
+"以上傳的映像檔不包含支援格式. 請確認您選擇的是針對您的平台採用的通用映像檔."
 
 msgid "There are no active leases."
 msgstr "租賃尚未啟動."
@@ -3272,9 +3366,6 @@ msgstr ""
 msgid "Tunnel type"
 msgstr ""
 
-msgid "Turbo Mode"
-msgstr "渦輪爆衝模式"
-
 msgid "Tx-Power"
 msgstr "傳送-功率"
 
@@ -3402,6 +3493,11 @@ msgstr "已使用"
 msgid "Used Key Slot"
 msgstr "已使用的關鍵插槽"
 
+msgid ""
+"Used for two different purposes: RADIUS NAS ID and 802.11r R0KH-ID. Not "
+"needed with normal WPA(2)-PSK."
+msgstr ""
+
 msgid "User certificate (PEM encoded)"
 msgstr ""
 
@@ -3554,20 +3650,17 @@ msgstr "寫入已接收的DNS請求到系統日誌中"
 msgid "Write system log to file"
 msgstr ""
 
-msgid "XR Support"
-msgstr "支援XR無線陣列"
-
 msgid ""
 "You can enable or disable installed init scripts here. Changes will applied "
 "after a device reboot.<br /><strong>Warning: If you disable essential init "
 "scripts like \"network\", your device might become inaccessible!</strong>"
 msgstr ""
-"可以開啟或關閉初始化指令在這. 修改將會在設備重開後被啟用. <br /><strong>警"
-"告: 假如你關閉必要的初始化腳本像\"網路\", 你的設備將可能無法存取!</strong>"
+"可以開啟或關閉初始化指令在這. 修改將會在設備重開後被啟用. <br /><strong>警"
+"告: 假如您關閉必要的初始化腳本像\"網路\", 您的設備將可能無法存取!</strong>"
 
 msgid ""
-"You must enable Java Script in your browser or LuCI will not work properly."
-msgstr "在瀏覽器你必須啟用Java Script否則LuCI無法正常運作."
+"You must enable JavaScript in your browser or LuCI will not work properly."
+msgstr "在瀏覽器您必須啟用JavaScript否則LuCI無法正常運作."
 
 msgid ""
 "Your Internet Explorer is too old to display this page correctly. Please "
@@ -3581,9 +3674,6 @@ msgstr "任意"
 msgid "auto"
 msgstr "自動"
 
-msgid "automatic"
-msgstr ""
-
 msgid "baseT"
 msgstr "baseT"
 
@@ -3657,7 +3747,7 @@ msgstr "本地<abbr title=\"Domain Name System\">DNS</abbr> 檔案"
 msgid "minimum 1280, maximum 1480"
 msgstr ""
 
-msgid "navigation Navigation"
+msgid "minutes"
 msgstr ""
 
 msgid "no"
@@ -3693,12 +3783,6 @@ msgstr "路由"
 msgid "server mode"
 msgstr ""
 
-msgid "skiplink1 Skip to navigation"
-msgstr ""
-
-msgid "skiplink2 Skip to content"
-msgstr ""
-
 msgid "stateful-only"
 msgstr ""
 
@@ -3711,6 +3795,9 @@ msgstr ""
 msgid "tagged"
 msgstr "標籤"
 
+msgid "time units (TUs / 1.024 ms) [1000-65535]"
+msgstr ""
+
 msgid "unknown"
 msgstr "未知"
 
@@ -3732,6 +3819,57 @@ msgstr "是的"
 msgid "« Back"
 msgstr "« 倒退"
 
+#~ msgid "Leasetime"
+#~ msgstr "租賃時間"
+
+#~ msgid "AR Support"
+#~ msgstr "AR支援"
+
+#~ msgid "Atheros 802.11%s Wireless Controller"
+#~ msgstr "Atheros 802.11%s 無線控制器"
+
+#~ msgid "Background Scan"
+#~ msgstr "背景搜尋"
+
+#~ msgid "Compression"
+#~ msgstr "壓縮"
+
+#~ msgid "Disable HW-Beacon timer"
+#~ msgstr "關閉硬體燈號計時器"
+
+#~ msgid "Do not send probe responses"
+#~ msgstr "不傳送探測回應"
+
+#~ msgid "Fast Frames"
+#~ msgstr "快速迅框群"
+
+#~ msgid "Maximum Rate"
+#~ msgstr "最快速度"
+
+#~ msgid "Minimum Rate"
+#~ msgstr "最低速度"
+
+#~ msgid "Multicast Rate"
+#~ msgstr "多點群播速度"
+
+#~ msgid "Outdoor Channels"
+#~ msgstr "室外通道"
+
+#~ msgid "Regulatory Domain"
+#~ msgstr "監管網域"
+
+#~ msgid "Separate WDS"
+#~ msgstr "分隔WDS中繼"
+
+#~ msgid "Static WDS"
+#~ msgstr "靜態WDS"
+
+#~ msgid "Turbo Mode"
+#~ msgstr "渦輪爆衝模式"
+
+#~ msgid "XR Support"
+#~ msgstr "支援XR無線陣列"
+
 #~ msgid "An additional network will be created if you leave this unchecked."
 #~ msgstr "取消選取將會另外建立一個新網路,而不會覆蓋目前的網路設定"
 
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 3b5f3eb..2cb2108 100644 (file)
@@ -238,6 +238,7 @@ function iface_status(ifaces)
                                ipaddrs    = net:ipaddrs(),
                                ip6addrs   = net:ip6addrs(),
                                dnsaddrs   = net:dnsaddrs(),
+                               ip6prefix  = net:ip6prefix(),
                                name       = device:shortname(),
                                type       = device:type(),
                                ifname     = device:name(),
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 10636a4..0c01cef 100644 (file)
@@ -68,9 +68,10 @@ se = s:taboption("advanced", Flag, "sequential_ip",
        translate("Allocate IP addresses sequentially, starting from the lowest available address"))
 se.optional = true
 
-s:taboption("advanced", Flag, "boguspriv",
+bp = s:taboption("advanced", Flag, "boguspriv",
        translate("Filter private"),
        translate("Do not forward reverse lookups for local networks"))
+bp.default = bp.enabled
 
 s:taboption("advanced", Flag, "filterwin2k",
        translate("Filter useless"),
@@ -275,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
@@ -285,6 +296,19 @@ ip.datatype = "or(ip4addr,'ignore')"
 time = s:option(Value, "leasetime", translate("Lease time"))
 time.rmempty  = true
 
+duid = s:option(Value, "duid", translate("<abbr title=\"The DHCP Unique Identifier\">DUID</abbr>"))
+duid.datatype = "and(rangelength(28,36),hexstring)"
+fp = io.open("/var/hosts/odhcpd")
+if fp then
+       for line in fp:lines() do
+               local net_val, duid_val = string.match(line, "# (%S+)%s+(%S+)")
+               if duid_val then
+                       duid:value(duid_val, duid_val)
+               end
+       end
+       fp:close()
+end
+
 hostid = s:option(Value, "hostid", translate("<abbr title=\"Internet Protocol Version 6\">IPv6</abbr>-Suffix (hex)"))
 
 ipc.neighbors({ family = 4 }, function(n)
index 16a1044..4fc71ce 100644 (file)
@@ -220,6 +220,12 @@ auto.default = (net:proto() == "none") and auto.disabled or auto.enabled
 delegate = s:taboption("advanced", Flag, "delegate", translate("Use builtin IPv6-management"))
 delegate.default = delegate.enabled
 
+force_link = s:taboption("advanced", Flag, "force_link",
+       translate("Force link"),
+       translate("Set interface properties regardless of the link carrier (If set, carrier sense events do not invoke hotplug handlers)."))
+
+force_link.default = (net:proto() == "static") and force_link.enabled or force_link.disabled
+
 
 if not net:is_virtual() then
        br = s:taboption("physical", Flag, "type", translate("Bridge interfaces"), translate("creates a bridge over specified interface(s)"))
@@ -439,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 385e114..22f7c5f 100644 (file)
@@ -38,6 +38,7 @@ if fs.access("/etc/init.d/dsl_control") then
        tone:value("bv", translate("B43 + B43C + V43"))
 
        xfer_mode = dsl:option(ListValue, "xfer_mode", translate("Encapsulation mode"))
+       xfer_mode:value("", translate("auto"))
        xfer_mode:value("atm", translate("ATM (Asynchronous Transfer Mode)"))
        xfer_mode:value("ptm", translate("PTM/EFM (Packet Transfer Mode)"))
 
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 afe0d66..c642269 100644 (file)
@@ -248,64 +248,6 @@ if hwtype == "mac80211" then
 end
 
 
-------------------- Madwifi Device ------------------
-
-if hwtype == "atheros" then
-       tp = s:taboption("general",
-               (#tx_power_list > 0) and ListValue or Value,
-               "txpower", translate("Transmit Power"), "dBm")
-
-       tp.rmempty = true
-       tp.default = tx_power_cur
-
-       function tp.cfgvalue(...)
-               return txpower_current(Value.cfgvalue(...), tx_power_list)
-       end
-
-       tp:value("", translate("auto"))
-       for _, p in ipairs(tx_power_list) do
-               tp:value(p.driver_dbm, "%i dBm (%i mW)"
-                       %{ p.display_dbm, p.display_mw })
-       end
-
-       s:taboption("advanced", Flag, "diversity", translate("Diversity")).rmempty = false
-
-       if not nsantenna then
-               ant1 = s:taboption("advanced", ListValue, "txantenna", translate("Transmitter Antenna"))
-               ant1.widget = "radio"
-               ant1.orientation = "horizontal"
-               ant1:depends("diversity", "")
-               ant1:value("0", translate("auto"))
-               ant1:value("1", translate("Antenna 1"))
-               ant1:value("2", translate("Antenna 2"))
-
-               ant2 = s:taboption("advanced", ListValue, "rxantenna", translate("Receiver Antenna"))
-               ant2.widget = "radio"
-               ant2.orientation = "horizontal"
-               ant2:depends("diversity", "")
-               ant2:value("0", translate("auto"))
-               ant2:value("1", translate("Antenna 1"))
-               ant2:value("2", translate("Antenna 2"))
-
-       else -- NanoFoo
-               local ant = s:taboption("advanced", ListValue, "antenna", translate("Transmitter Antenna"))
-               ant:value("auto")
-               ant:value("vertical")
-               ant:value("horizontal")
-               ant:value("external")
-       end
-
-       s:taboption("advanced", Value, "distance", translate("Distance Optimization"),
-               translate("Distance to farthest network member in meters."))
-       s:taboption("advanced", Value, "regdomain", translate("Regulatory Domain"))
-       s:taboption("advanced", Value, "country", translate("Country Code"))
-       s:taboption("advanced", Flag, "outdoor", translate("Outdoor Channels"))
-
-       --s:option(Flag, "nosbeacon", translate("Disable HW-Beacon timer"))
-end
-
-
-
 ------------------- Broadcom Device ------------------
 
 if hwtype == "broadcom" then
@@ -518,103 +460,14 @@ if hwtype == "mac80211" then
        wmm:depends({mode="ap"})
        wmm:depends({mode="ap-wds"})
        wmm.default = wmm.enabled
-       
-       ifname = s:taboption("advanced", Value, "ifname", translate("Interface name"), translate("Override default interface name"))
-       ifname.optional = true
-end
-
-
-
--------------------- Madwifi Interface ----------------------
-
-if hwtype == "atheros" then
-       mode:value("ahdemo", translate("Pseudo Ad-Hoc (ahdemo)"))
-       mode:value("monitor", translate("Monitor"))
-       mode:value("ap-wds", "%s (%s)" % {translate("Access Point"), translate("WDS")})
-       mode:value("sta-wds", "%s (%s)" % {translate("Client"), translate("WDS")})
-       mode:value("wds", translate("Static WDS"))
-
-       function mode.write(self, section, value)
-               if value == "ap-wds" then
-                       ListValue.write(self, section, "ap")
-                       m.uci:set("wireless", section, "wds", 1)
-               elseif value == "sta-wds" then
-                       ListValue.write(self, section, "sta")
-                       m.uci:set("wireless", section, "wds", 1)
-               else
-                       ListValue.write(self, section, value)
-                       m.uci:delete("wireless", section, "wds")
-               end
-       end
 
-       function mode.cfgvalue(self, section)
-               local mode = ListValue.cfgvalue(self, section)
-               local wds  = m.uci:get("wireless", section, "wds") == "1"
-
-               if mode == "ap" and wds then
-                       return "ap-wds"
-               elseif mode == "sta" and wds then
-                       return "sta-wds"
-               else
-                       return mode
-               end
-       end
-
-       bssid:depends({mode="adhoc"})
-       bssid:depends({mode="ahdemo"})
-       bssid:depends({mode="wds"})
-
-       wdssep = s:taboption("advanced", Flag, "wdssep", translate("Separate WDS"))
-       wdssep:depends({mode="ap-wds"})
-
-       s:taboption("advanced", Flag, "doth", "802.11h")
-       hidden = s:taboption("general", Flag, "hidden", translate("Hide <abbr title=\"Extended Service Set Identifier\">ESSID</abbr>"))
-       hidden:depends({mode="ap"})
-       hidden:depends({mode="adhoc"})
-       hidden:depends({mode="ap-wds"})
-       hidden:depends({mode="sta-wds"})
-       isolate = s:taboption("advanced", Flag, "isolate", translate("Separate Clients"),
+       isolate = s:taboption("advanced", Flag, "isolate", translate("Isolate Clients"),
         translate("Prevents client-to-client communication"))
        isolate:depends({mode="ap"})
-       s:taboption("advanced", Flag, "bgscan", translate("Background Scan"))
-
-       mp = s:taboption("macfilter", ListValue, "macpolicy", translate("MAC-Address Filter"))
-       mp:value("", translate("disable"))
-       mp:value("allow", translate("Allow listed only"))
-       mp:value("deny", translate("Allow all except listed"))
-
-       ml = s:taboption("macfilter", DynamicList, "maclist", translate("MAC-List"))
-       ml.datatype = "macaddr"
-       ml:depends({macpolicy="allow"})
-       ml:depends({macpolicy="deny"})
-       nt.mac_hints(function(mac, name) ml:value(mac, "%s (%s)" %{ mac, name }) end)
-
-       s:taboption("advanced", Value, "rate", translate("Transmission Rate"))
-       s:taboption("advanced", Value, "mcast_rate", translate("Multicast Rate"))
-       s:taboption("advanced", Value, "frag", translate("Fragmentation Threshold"))
-       s:taboption("advanced", Value, "rts", translate("RTS/CTS Threshold"))
-       s:taboption("advanced", Value, "minrate", translate("Minimum Rate"))
-       s:taboption("advanced", Value, "maxrate", translate("Maximum Rate"))
-       s:taboption("advanced", Flag, "compression", translate("Compression"))
-
-       s:taboption("advanced", Flag, "bursting", translate("Frame Bursting"))
-       s:taboption("advanced", Flag, "turbo", translate("Turbo Mode"))
-       s:taboption("advanced", Flag, "ff", translate("Fast Frames"))
-
-       s:taboption("advanced", Flag, "wmm", translate("WMM Mode"))
-       s:taboption("advanced", Flag, "xr", translate("XR Support"))
-       s:taboption("advanced", Flag, "ar", translate("AR Support"))
+       isolate:depends({mode="ap-wds"})
 
-       local swm = s:taboption("advanced", Flag, "sw_merge", translate("Disable HW-Beacon timer"))
-       swm:depends({mode="adhoc"})
-
-       local nos = s:taboption("advanced", Flag, "nosbeacon", translate("Disable HW-Beacon timer"))
-       nos:depends({mode="sta"})
-       nos:depends({mode="sta-wds"})
-
-       local probereq = s:taboption("advanced", Flag, "probereq", translate("Do not send probe responses"))
-       probereq.enabled  = "0"
-       probereq.disabled = "1"
+       ifname = s:taboption("advanced", Value, "ifname", translate("Interface name"), translate("Override default interface name"))
+       ifname.optional = true
 end
 
 
@@ -738,7 +591,7 @@ encr:value("none", "No Encryption")
 encr:value("wep-open",   translate("WEP Open System"), {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"}, {mode="ahdemo"}, {mode="wds"})
 encr:value("wep-shared", translate("WEP Shared Key"),  {mode="ap"}, {mode="sta"}, {mode="ap-wds"}, {mode="sta-wds"}, {mode="adhoc"}, {mode="ahdemo"}, {mode="wds"})
 
-if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
+if hwtype == "mac80211" or hwtype == "prism2" then
        local supplicant = fs.access("/usr/sbin/wpa_supplicant")
        local hostapd = fs.access("/usr/sbin/hostapd")
 
@@ -747,9 +600,9 @@ if hwtype == "atheros" or 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"})
@@ -767,9 +620,9 @@ if hwtype == "atheros" or 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"})
@@ -899,14 +752,105 @@ for slot=1,4 do
 end
 
 
-if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
-       nasid = s:taboption("encryption", Value, "nasid", translate("NAS ID"))
+if hwtype == "mac80211" or hwtype == "prism2" then
+
+       -- Probe 802.11r support (and EAP support as a proxy for Openwrt)
+       local has_80211r = (os.execute("hostapd -v11r 2>/dev/null || hostapd -veap 2>/dev/null") == 0)
+
+       ieee80211r = s:taboption("encryption", Flag, "ieee80211r",
+               translate("802.11r Fast Transition"),
+               translate("Enables fast roaming among access points that belong " ..
+                       "to the same Mobility Domain"))
+       ieee80211r:depends({mode="ap", encryption="wpa"})
+       ieee80211r:depends({mode="ap", encryption="wpa2"})
+       ieee80211r:depends({mode="ap-wds", encryption="wpa"})
+       ieee80211r:depends({mode="ap-wds", encryption="wpa2"})
+       if has_80211r then
+               ieee80211r:depends({mode="ap", encryption="psk"})
+               ieee80211r:depends({mode="ap", encryption="psk2"})
+               ieee80211r:depends({mode="ap", encryption="psk-mixed"})
+               ieee80211r:depends({mode="ap-wds", encryption="psk"})
+               ieee80211r:depends({mode="ap-wds", encryption="psk2"})
+               ieee80211r:depends({mode="ap-wds", encryption="psk-mixed"})
+       end
+       ieee80211r.rmempty = true
+
+       nasid = s:taboption("encryption", Value, "nasid", translate("NAS ID"),
+               translate("Used for two different purposes: RADIUS NAS ID and " ..
+                       "802.11r R0KH-ID. Not needed with normal WPA(2)-PSK."))
        nasid:depends({mode="ap", encryption="wpa"})
        nasid:depends({mode="ap", encryption="wpa2"})
        nasid:depends({mode="ap-wds", encryption="wpa"})
        nasid:depends({mode="ap-wds", encryption="wpa2"})
+       nasid:depends({ieee80211r="1"})
        nasid.rmempty = true
 
+       mobility_domain = s:taboption("encryption", Value, "mobility_domain",
+                       translate("Mobility Domain"),
+                       translate("4-character hexadecimal ID"))
+       mobility_domain:depends({ieee80211r="1"})
+       mobility_domain.placeholder = "4f57"
+       mobility_domain.datatype = "and(hexstring,rangelength(4,4))"
+       mobility_domain.rmempty = true
+
+       reassociation_deadline = s:taboption("encryption", Value, "reassociation_deadline",
+               translate("Reassociation Deadline"),
+               translate("time units (TUs / 1.024 ms) [1000-65535]"))
+       reassociation_deadline:depends({ieee80211r="1"})
+       reassociation_deadline.placeholder = "1000"
+       reassociation_deadline.datatype = "range(1000,65535)"
+       reassociation_deadline.rmempty = true
+
+       ft_protocol = s:taboption("encryption", ListValue, "ft_over_ds", translate("FT protocol"))
+       ft_protocol:depends({ieee80211r="1"})
+       ft_protocol:value("1", translatef("FT over DS"))
+       ft_protocol:value("0", translatef("FT over the Air"))
+       ft_protocol.rmempty = true
+
+       ft_psk_generate_local = s:taboption("encryption", Flag, "ft_psk_generate_local",
+               translate("Generate PMK locally"),
+               translate("When using a PSK, the PMK can be generated locally without inter AP communications"))
+       ft_psk_generate_local:depends({ieee80211r="1"})
+
+       r0_key_lifetime = s:taboption("encryption", Value, "r0_key_lifetime",
+                       translate("R0 Key Lifetime"), translate("minutes"))
+       r0_key_lifetime:depends({ieee80211r="1", ft_psk_generate_local=""})
+       r0_key_lifetime.placeholder = "10000"
+       r0_key_lifetime.datatype = "uinteger"
+       r0_key_lifetime.rmempty = true
+
+       r1_key_holder = s:taboption("encryption", Value, "r1_key_holder",
+                       translate("R1 Key Holder"),
+                       translate("6-octet identifier as a hex string - no colons"))
+       r1_key_holder:depends({ieee80211r="1", ft_psk_generate_local=""})
+       r1_key_holder.placeholder = "00004f577274"
+       r1_key_holder.datatype = "and(hexstring,rangelength(12,12))"
+       r1_key_holder.rmempty = true
+
+       pmk_r1_push = s:taboption("encryption", Flag, "pmk_r1_push", translate("PMK R1 Push"))
+       pmk_r1_push:depends({ieee80211r="1", ft_psk_generate_local=""})
+       pmk_r1_push.placeholder = "0"
+       pmk_r1_push.rmempty = true
+
+       r0kh = s:taboption("encryption", DynamicList, "r0kh", translate("External R0 Key Holder List"),
+               translate("List of R0KHs in the same Mobility Domain. " ..
+                       "<br />Format: MAC-address,NAS-Identifier,128-bit key as hex string. " ..
+                       "<br />This list is used to map R0KH-ID (NAS Identifier) to a destination " ..
+                       "MAC address when requesting PMK-R1 key from the R0KH that the STA " ..
+                       "used during the Initial Mobility Domain Association."))
+       r0kh:depends({ieee80211r="1", ft_psk_generate_local=""})
+       r0kh.rmempty = true
+
+       r1kh = s:taboption("encryption", DynamicList, "r1kh", translate("External R1 Key Holder List"),
+               translate ("List of R1KHs in the same Mobility Domain. "..
+                       "<br />Format: MAC-address,R1KH-ID as 6 octets with colons,128-bit key as hex string. "..
+                       "<br />This list is used to map R1KH-ID to a destination MAC address " ..
+                       "when sending PMK-R1 key from the R0KH. This is also the " ..
+                       "list of authorized R1KHs in the MD that can request PMK-R1 keys."))
+       r1kh:depends({ieee80211r="1", ft_psk_generate_local=""})
+       r1kh.rmempty = true
+       -- End of 802.11r options
+
        eaptype = s:taboption("encryption", ListValue, "eap_type", translate("EAP-Method"))
        eaptype:value("tls",  "TLS")
        eaptype:value("ttls", "TTLS")
@@ -1045,7 +989,59 @@ if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
        password.password = true
 end
 
-if hwtype == "atheros" or hwtype == "mac80211" or hwtype == "prism2" then
+-- ieee802.11w options
+if hwtype == "mac80211" then
+       local has_80211w = (os.execute("hostapd -v11w 2>/dev/null || hostapd -veap 2>/dev/null") == 0)
+       if has_80211w then
+               ieee80211w = s:taboption("encryption", ListValue, "ieee80211w",
+                       translate("802.11w Management Frame Protection"),
+                       translate("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)"))
+               ieee80211w.default = ""
+               ieee80211w.rmempty = true
+               ieee80211w:value("", translate("Disabled (default)"))
+               ieee80211w:value("1", translate("Optional"))
+               ieee80211w:value("2", translate("Required"))
+               ieee80211w:depends({mode="ap", encryption="wpa2"})
+               ieee80211w:depends({mode="ap-wds", encryption="wpa2"})
+               ieee80211w:depends({mode="ap", encryption="psk2"})
+               ieee80211w:depends({mode="ap", encryption="psk-mixed"})
+               ieee80211w:depends({mode="ap-wds", encryption="psk2"})
+               ieee80211w:depends({mode="ap-wds", encryption="psk-mixed"})
+
+               max_timeout = s:taboption("encryption", Value, "ieee80211w_max_timeout",
+                               translate("802.11w maximum timeout"),
+                               translate("802.11w Association SA Query maximum timeout"))
+               max_timeout:depends({ieee80211w="1"})
+               max_timeout:depends({ieee80211w="2"})
+               max_timeout.datatype = "uinteger"
+               max_timeout.placeholder = "1000"
+               max_timeout.rmempty = true
+
+               retry_timeout = s:taboption("encryption", Value, "ieee80211w_retry_timeout",
+                               translate("802.11w retry timeout"),
+                               translate("802.11w Association SA Query retry timeout"))
+               retry_timeout:depends({ieee80211w="1"})
+               retry_timeout:depends({ieee80211w="2"})
+               retry_timeout.datatype = "uinteger"
+               retry_timeout.placeholder = "201"
+               retry_timeout.rmempty = true
+       end
+
+       local key_retries = s:taboption("encryption", Flag, "wpa_disable_eapol_key_retries",
+               translate("Enable key reinstallation (KRACK) countermeasures"),
+               translate("Complicates key reinstallation attacks on the client side by disabling retransmission of EAPOL-Key frames that are used to install keys. This workaround might cause interoperability issues and reduced robustness of key negotiation especially in environments with heavy traffic load."))
+
+       key_retries:depends({mode="ap", encryption="wpa2"})
+       key_retries:depends({mode="ap", encryption="psk2"})
+       key_retries:depends({mode="ap", encryption="psk-mixed"})
+       key_retries:depends({mode="ap-wds", encryption="wpa2"})
+       key_retries:depends({mode="ap-wds", encryption="psk2"})
+       key_retries:depends({mode="ap-wds", encryption="psk-mixed"})
+end
+
+if hwtype == "mac80211" or hwtype == "prism2" then
        local wpasupplicant = fs.access("/usr/sbin/wpa_supplicant")
        local hostcli = fs.access("/usr/sbin/hostapd_cli")
        if hostcli and wpasupplicant then
index ea92eb9..016a619 100644 (file)
@@ -5,7 +5,10 @@
 local fs = require "nixio.fs"
 local cronfile = "/etc/crontabs/root" 
 
-f = SimpleForm("crontab", translate("Scheduled Tasks"), translate("This is the system crontab in which scheduled tasks can be defined."))
+f = SimpleForm("crontab", translate("Scheduled Tasks"),
+       translate("This is the system crontab in which scheduled tasks can be defined.") ..
+       translate("<br/>Note: you need to manually restart the cron service if the " ..
+               "crontab file was empty before editing."))
 
 t = f:field(TextValue, "crons")
 t.rmempty = true
index 4b6f397..74e2f1a 100644 (file)
@@ -7,10 +7,11 @@ local sysfs_path = "/sys/class/leds/"
 local leds = {}
 
 local fs   = require "nixio.fs"
-local util = require "nixio.util"
+local nu   = require "nixio.util"
+local util = require "luci.util"
 
 if fs.access(sysfs_path) then
-       leds = util.consume((fs.dir(sysfs_path)))
+       leds = nu.consume((fs.dir(sysfs_path)))
 end
 
 if #leds == 0 then
@@ -110,12 +111,32 @@ function usbdev.remove(self, section)
 end
 
 
-usbport = s:option(MultiValue, "ports", translate("USB Ports"))
+usbport = s:option(MultiValue, "port", translate("USB Ports"))
 usbport:depends("trigger", "usbport")
 usbport.rmempty = true
 usbport.widget = "checkbox"
+usbport.cast = "table"
 usbport.size = 1
 
+function usbport.valuelist(self, section)
+       local port, ports = nil, {}
+       for port in util.imatch(m.uci:get("system", section, "port")) do
+               local b, n = port:match("^usb(%d+)-port(%d+)$")
+               if not (b and n) then
+                       b, n = port:match("^(%d+)-(%d+)$")
+               end
+               if b and n then
+                       ports[#ports+1] = "usb%u-port%u" %{ tonumber(b), tonumber(n) }
+               end
+       end
+       return ports
+end
+
+function usbport.validate(self, value)
+       return type(value) == "string" and { value } or value
+end
+
+
 for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do
        local id = p:match("%d+-%d+")
        local mf = nixio.fs.readfile("/sys/bus/usb/devices/" .. id .. "/manufacturer") or "?"
@@ -123,8 +144,8 @@ for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*/manufacturer") do
        usbdev:value(id, "%s (%s - %s)" %{ id, mf, pr })
 end
 
-for p in nixio.fs.glob("/sys/bus/usb/devices/[0-9]*") do
-       local bus, port = p:match("(%d+)-(%d+)")
+for p in nixio.fs.glob("/sys/bus/usb/devices/*/usb[0-9]*-port[0-9]*") do
+       local bus, port = p:match("usb(%d+)-port(%d+)")
        if bus and port then
                usbport:value("usb%u-port%u" %{ tonumber(bus), tonumber(port) },
                              "Hub %u, Port %u" %{ tonumber(bus), tonumber(port) })
index 646d931..2512a35 100644 (file)
                                                                        ifc.ip6addrs[i]
                                                                );
                                                }
+                                               
+                                               if (ifc.ip6prefix)
+                                               {
+                                                       html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix);
+                                               }
 
                                                d.innerHTML = html;
                                        }
index 8c3b1ab..b15dd13 100644 (file)
                                                                ifc.ip6addrs[i]
                                                        );
                                        }
+                                       
+                                       if (ifc.ip6prefix)
+                                       {
+                                               html += String.format('<strong><%:IPv6-PD%>:</strong> %s<br />', ifc.ip6prefix);
+                                       }
 
                                        d.innerHTML = html;
                                }
index 9c351d3..4465095 100644 (file)
 
                        return name
 
-               -- madwifi
-               elseif name == "ath" or name == "wifi" then
-                       return translatef("Atheros 802.11%s Wireless Controller", bands)
-
                -- ralink
                elseif name == "ra" then
                        return translatef("RaLink 802.11%s Wireless Controller", bands)
index 0b2e52e..b7ebc41 100644 (file)
                                                {
                                                        var c  = conn[i];
 
-                                                       if (c.src == '127.0.0.1' && c.dst == '127.0.0.1')
+                                                       if ((c.src == '127.0.0.1' && c.dst == '127.0.0.1')
+                                                       || (c.src == '::1' && c.dst == '::1'))
                                                                continue;
 
                                                        var tr = conn_table.rows[0].parentNode.insertRow(-1);
index c119b57..1a8770e 100644 (file)
@@ -7,6 +7,6 @@
 <%+header%>
 <h2 name="content"><%:Kernel Log%></h2>
 <div id="content_syslog">
-<textarea readonly="readonly" wrap="off" rows="<%=dmesg:cmatch("\n")+2%>" id="syslog"><%=dmesg:pcdata()%></textarea>
+<textarea style="font-size: 12px;" readonly="readonly" wrap="off" rows="<%=dmesg:cmatch("\n")+2%>" id="syslog"><%=dmesg:pcdata()%></textarea>
 </div>
 <%+footer%>
index 8976e30..d29a894 100644 (file)
                local wan = ntm:get_wannet()
                local wan6 = ntm:get_wan6net()
 
-               local conn_count = tonumber((
-                       luci.sys.exec("wc -l /proc/net/nf_conntrack") or
-                       luci.sys.exec("wc -l /proc/net/ip_conntrack") or
-                       ""):match("%d+")) or 0
+               local conn_count = tonumber(
+                       fs.readfile("/proc/sys/net/netfilter/nf_conntrack_count")) or 0
 
                local conn_max = tonumber((
                        luci.sys.exec("sysctl net.nf_conntrack_max") or
 
                if wan6 then
                        rv.wan6 = {
-                               ip6addr = wan6:ip6addr(),
-                               gw6addr = wan6:gw6addr(),
-                               dns     = wan6:dns6addrs(),
-                               uptime  = wan6:uptime(),
-                               ifname  = wan6:ifname(),
-                               link    = wan6:adminlink()
+                               ip6addr   = wan6:ip6addr(),
+                               gw6addr   = wan6:gw6addr(),
+                               dns       = wan6:dns6addrs(),
+                               ip6prefix = wan6:ip6prefix(),
+                               uptime    = wan6:uptime(),
+                               proto     = wan6:proto(),
+                               ifname    = wan6:ifname(),
+                               link      = wan6:adminlink()
                        }
                end
 
                        if (ifc6 && ifc6.ifname && ifc6.proto != 'none')
                        {
                                var s = String.format(
-                                       '<strong><%:Address%>: </strong>%s<br />' +
+                                       '<strong><%:Type%>: </strong>%s%s<br />',
+                                               ifc6.proto, (ifc6.ip6prefix) ? '-pd' : ''
+                               );
+                               
+                               if (!ifc6.ip6prefix)
+                               {
+                                       s += String.format(
+                                               '<strong><%:Address%>: </strong>%s<br />',
+                                               (ifc6.ip6addr) ? ifc6.ip6addr : '::'
+                                       );
+                               }
+                               else
+                               {
+                                       s += String.format(
+                                               '<strong><%:Prefix Delegated%>: </strong>%s<br />',
+                                               ifc6.ip6prefix
+                                       );
+                                       if (ifc6.ip6addr)
+                                       {
+                                               s += String.format(
+                                                       '<strong><%:Address%>: </strong>%s<br />',
+                                                       ifc6.ip6addr
+                                               );
+                                       }
+                               }
+
+                               s += String.format(
                                        '<strong><%:Gateway%>: </strong>%s<br />',
-                                               (ifc6.ip6addr) ? ifc6.ip6addr : '::',
                                                (ifc6.gw6addr) ? ifc6.gw6addr : '::'
                                );
 
index b87f21d..fb734a7 100644 (file)
@@ -7,6 +7,6 @@
 <%+header%>
 <h2 name="content"><%:System Log%></h2>
 <div id="content_syslog">
-<textarea readonly="readonly" wrap="off" rows="<%=syslog:cmatch("\n")+2%>" id="syslog"><%=syslog:pcdata()%></textarea>
+<textarea style="font-size: 12px;" readonly="readonly" wrap="off" rows="<%=syslog:cmatch("\n")+2%>" id="syslog"><%=syslog:pcdata()%></textarea>
 </div>
 <%+footer%>
index 63668d4..8ddd917 100644 (file)
@@ -521,8 +521,8 @@ static int run_daemon(void)
                                if (strstr(line, "TIME_WAIT"))
                                        continue;
 
-                               if (strstr(line, "src=127.0.0.1 ") &&
-                                   strstr(line, "dst=127.0.0.1 "))
+                               if ((strstr(line, "src=127.0.0.1 ") && strstr(line, "dst=127.0.0.1 ")) 
+                               || (strstr(line, "src=::1 ") && strstr(line, "dst=::1 ")))
                                        continue;
 
                                if (sscanf(line, "%*s %*d %s", ifname) || sscanf(line, "%s %*d", ifname))
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 19952cd..ec929f1 100644 (file)
@@ -156,18 +156,6 @@ end
 
 local hwtype = m:get(wifidevs[1], "type")
 
-if hwtype == "atheros" then
-       mode = s:option(ListValue, "hwmode", translate("Mode"))
-       mode.override_values = true
-       mode:value("", "auto")
-       mode:value("11b", "802.11b")
-       mode:value("11g", "802.11g")
-       mode:value("11a", "802.11a")
-       mode:value("11bg", "802.11b+g")
-       mode.rmempty = true
-end
-
-
 ch = s:option(Value, "channel", translate("Channel"))
 for i=1, 14 do
        ch:value(i, i .. " (2.4 GHz)")
@@ -224,7 +212,7 @@ encr.override_values = true
 encr:value("none", "No Encryption")
 encr:value("wep", "WEP")
 
-if hwtype == "atheros" or hwtype == "mac80211" then
+if hwtype == "mac80211" then
        local supplicant = fs.access("/usr/sbin/wpa_supplicant")
        local hostapd    = fs.access("/usr/sbin/hostapd")
 
@@ -288,7 +276,7 @@ port:depends({mode="ap", encryption="wpa2"})
 port.rmempty = true
 
 
-if hwtype == "atheros" or hwtype == "mac80211" then
+if hwtype == "mac80211" then
        nasid = s:option(Value, "nasid", translate("NAS ID"))
        nasid:depends({mode="ap", encryption="wpa"})
        nasid:depends({mode="ap", encryption="wpa2"})
@@ -339,7 +327,7 @@ if hwtype == "atheros" or hwtype == "mac80211" then
 end
 
 
-if hwtype == "atheros" or hwtype == "broadcom" then
+if hwtype == "broadcom" then
        iso = s:option(Flag, "isolate", translate("AP-Isolation"), translate("Prevents Client to Client communication"))
        iso.rmempty = true
        iso:depends("mode", "ap")
@@ -349,7 +337,7 @@ if hwtype == "atheros" or hwtype == "broadcom" then
        hide:depends("mode", "ap")
 end
 
-if hwtype == "mac80211" or hwtype == "atheros" then
+if hwtype == "mac80211" then
        bssid:depends({mode="adhoc"})
 end
 
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 2d58b16..d273055 100644 (file)
@@ -143,7 +143,7 @@ msgid "If selected then the default content element is not shown."
 msgstr "如果选中,那么默认内容元素将不显示。"
 
 msgid "If you are interested in our project then contact the local community"
-msgstr "如果对我们的项目感兴趣,请联系当地的社区"
+msgstr "如果对我们的项目感兴趣,请联系当地的社区"
 
 msgid "Index Page"
 msgstr "索引页"
@@ -155,7 +155,7 @@ msgid ""
 "Internet access depends on technical and organisational conditions and may "
 "or may not work for you."
 msgstr ""
-"访问因特网取决于技术和机构的前提,可能会、也可能不会像设想的那样运作。"
+"访问因特网取决于技术和机构的前提,可能会、也可能不会像设想的那样运作。"
 
 msgid "It is operated by"
 msgstr "它是由"
@@ -324,7 +324,7 @@ msgstr "当地社区设置。"
 msgid ""
 "These pages will assist you in setting up your router for Freifunk or "
 "similar wireless community networks."
-msgstr "这些页面将帮助设置路由器Freifunk或类似的无线社区网络。"
+msgstr "这些页面将帮助设置路由器Freifunk或类似的无线社区网络。"
 
 msgid "This is the access point"
 msgstr "AP"
@@ -368,7 +368,7 @@ msgstr ""
 
 msgid ""
 "You can find further information about the global Freifunk initiative at"
-msgstr "可以找到更多有关全球Freifunk活动的信息"
+msgstr "可以找到更多有关全球Freifunk活动的信息"
 
 msgid "You can manually edit the selected community profile here."
 msgstr "您可以在这里手动编辑所选社区配置文件。"
@@ -376,7 +376,7 @@ msgstr "您可以在这里手动编辑所选社区配置文件。"
 msgid ""
 "You need to select a profile before you can edit it. To select a profile go "
 "to"
-msgstr "编辑它之前,需要选择一个配置文件。选择配置文件"
+msgstr "编辑它之前,需要选择一个配置文件。选择配置文件"
 
 msgid "and fill out all required fields."
 msgstr "填写所有必填字段。"
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")
diff --git a/protocols/luci-proto-ncm/Makefile b/protocols/luci-proto-ncm/Makefile
new file mode 100644 (file)
index 0000000..5fd9c9a
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Support for NCM
+LUCI_DEPENDS:=+comgt-ncm
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua b/protocols/luci-proto-ncm/luasrc/model/cbi/admin_network/proto_ncm.lua
new file mode 100644 (file)
index 0000000..917c88c
--- /dev/null
@@ -0,0 +1,157 @@
+--[[
+LuCI - Lua Configuration Interface
+
+Copyright 2015 Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+]]--
+
+local map, section, net = ...
+
+local device, apn, service, pincode, username, password, dialnumber
+local ipv6, maxwait, defaultroute, metric, peerdns, dns,
+      keepalive_failure, keepalive_interval, demand
+
+
+device = section:taboption("general", Value, "device", translate("Modem device"))
+device.rmempty = false
+
+local device_suggestions = nixio.fs.glob("/dev/cdc-wdm*")
+       or nixio.fs.glob("/dev/ttyUSB*")
+
+if device_suggestions then
+       local node
+       for node in device_suggestions do
+               device:value(node)
+       end
+end
+
+
+mode = section:taboption("general", Value, "mode", translate("Service Type"))
+mode.default = "auto"
+mode:value("preferlte", translate("Prefer LTE"))
+mode:value("preferumts", translate("Prefer UMTS"))
+mode:value("lte", "LTE")
+mode:value("umts", "UMTS/GPRS")
+mode:value("gsm", translate("GPRS only"))
+mode:value("auto", translate("auto"))
+
+
+apn = section:taboption("general", Value, "apn", translate("APN"))
+
+
+pincode = section:taboption("general", Value, "pincode", translate("PIN"))
+
+
+username = section:taboption("general", Value, "username", translate("PAP/CHAP username"))
+
+
+password = section:taboption("general", Value, "password", translate("PAP/CHAP password"))
+password.password = true
+
+dialnumber = section:taboption("general", Value, "dialnumber", translate("Dial number"))
+dialnumber.placeholder = "*99***1#"
+
+if luci.model.network:has_ipv6() then
+
+       ipv6 = section:taboption("advanced", ListValue, "ipv6")
+       ipv6:value("auto", translate("Automatic"))
+       ipv6:value("0", translate("Disabled"))
+       ipv6:value("1", translate("Manual"))
+       ipv6.default = "auto"
+
+end
+
+
+maxwait = section:taboption("advanced", Value, "maxwait",
+       translate("Modem init timeout"),
+       translate("Maximum amount of seconds to wait for the modem to become ready"))
+
+maxwait.placeholder = "20"
+maxwait.datatype    = "min(1)"
+
+
+defaultroute = section:taboption("advanced", Flag, "defaultroute",
+       translate("Use default gateway"),
+       translate("If unchecked, no default route is configured"))
+
+defaultroute.default = defaultroute.enabled
+
+metric = section:taboption("advanced", Value, "metric",
+       translate("Use gateway metric"))
+
+metric.placeholder = "0"
+metric.datatype    = "uinteger"
+metric:depends("defaultroute", defaultroute.enabled)
+
+
+peerdns = section:taboption("advanced", Flag, "peerdns",
+       translate("Use DNS servers advertised by peer"),
+       translate("If unchecked, the advertised DNS server addresses are ignored"))
+
+peerdns.default = peerdns.enabled
+
+
+dns = section:taboption("advanced", DynamicList, "dns",
+       translate("Use custom DNS servers"))
+
+dns:depends("peerdns", "")
+dns.datatype = "ipaddr"
+dns.cast     = "string"
+
+
+keepalive_failure = section:taboption("advanced", Value, "_keepalive_failure",
+       translate("LCP echo failure threshold"),
+       translate("Presume peer to be dead after given amount of LCP echo failures, use 0 to ignore failures"))
+
+function keepalive_failure.cfgvalue(self, section)
+       local v = m:get(section, "keepalive")
+       if v and #v > 0 then
+               return tonumber(v:match("^(%d+)[ ,]+%d+") or v)
+       end
+end
+
+function keepalive_failure.write() end
+function keepalive_failure.remove() end
+
+keepalive_failure.placeholder = "0"
+keepalive_failure.datatype    = "uinteger"
+
+
+keepalive_interval = section:taboption("advanced", Value, "_keepalive_interval",
+       translate("LCP echo interval"),
+       translate("Send LCP echo requests at the given interval in seconds, only effective in conjunction with failure threshold"))
+
+function keepalive_interval.cfgvalue(self, section)
+       local v = m:get(section, "keepalive")
+       if v and #v > 0 then
+               return tonumber(v:match("^%d+[ ,]+(%d+)"))
+       end
+end
+
+function keepalive_interval.write(self, section, value)
+       local f = tonumber(keepalive_failure:formvalue(section)) or 0
+       local i = tonumber(value) or 5
+       if i < 1 then i = 1 end
+       if f > 0 then
+               m:set(section, "keepalive", "%d %d" %{ f, i })
+       else
+               m:del(section, "keepalive")
+       end
+end
+
+keepalive_interval.remove      = keepalive_interval.write
+keepalive_interval.placeholder = "5"
+keepalive_interval.datatype    = "min(1)"
+
+
+demand = section:taboption("advanced", Value, "demand",
+       translate("Inactivity timeout"),
+       translate("Close inactive connection after the given amount of seconds, use 0 to persist connection"))
+
+demand.placeholder = "0"
+demand.datatype    = "uinteger"
diff --git a/protocols/luci-proto-ncm/luasrc/model/network/proto_ncm.lua b/protocols/luci-proto-ncm/luasrc/model/network/proto_ncm.lua
new file mode 100644 (file)
index 0000000..6c5b34e
--- /dev/null
@@ -0,0 +1,61 @@
+--[[
+LuCI - Network model - NCM protocol extension
+
+Copyright 2015 Cezary Jackiewicz <cezary.jackiewicz@gmail.com>
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+
+]]--
+
+local netmod = luci.model.network
+
+local proto = netmod:register_protocol("ncm")
+local interface = luci.model.network.interface
+
+function proto.get_i18n(self)
+       return luci.i18n.translate("NCM")
+end
+
+function proto.opkg_package(self)
+       return "comgt-ncm"
+end
+
+function proto.is_installed(self)
+       return nixio.fs.access("/lib/netifd/proto/ncm.sh")
+end
+
+function proto.is_floating(self)
+       return true
+end
+
+function proto.is_virtual(self)
+       return true
+end
+
+function proto.get_interface(self)
+       local _ifname=netmod.protocol.ifname(self)
+       if not _ifname then
+               _ifname = "wan"
+       end
+       return interface(_ifname, self)
+end
+
+function proto.get_interfaces(self)
+       return nil
+end
+
+function proto.contains_interface(self, ifc)
+       return (netmod:ifnameof(ifc) == self:ifname())
+end
+
+netmod:register_pattern_virtual("^ncm-%%w")
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 9c77e67..0800e27 100644 (file)
@@ -10,9 +10,6 @@ LUCI_TITLE:=Support for VPNC VPN
 LUCI_DEPENDS:=+vpnc
 LUCI_PKGARCH:=all
 
-PKG_NAME:=luci-proto-vpnc
-PKG_RELEASE=1
-PKG_VERSION:=1.0.0
 PKG_MAINTAINER:=Daniel Dickinson <openwrt@daniel.thecshore.com>
 PKG_LICENSE:=Apache-2.0
 
@@ -20,4 +17,4 @@ LUA_TARGET:=source
 
 include ../../luci.mk
 
-# call BuildPackage - OpenWrt buildroot signature
\ No newline at end of file
+# call BuildPackage - OpenWrt buildroot signature
index a47ce15..d8217ce 100644 (file)
@@ -67,7 +67,7 @@ enable_no_enc.default = enable_no_enc.disabled
 
 enable_single_des = section:taboption("general", Flag, "enable_single_des",
        translate("Enable Single DES"),
-       translate("If checked, 1DES is enaled"))
+       translate("If checked, 1DES is enabled"))
 enable_no_enc.default = enable_single_des.disabled
 
 dpd_idle = section:taboption("general", Value, "dpd_idle", translate("DPD Idle Timeout"))
index ed94a55..0dc70cf 100644 (file)
@@ -8,6 +8,7 @@ include $(TOPDIR)/rules.mk
 
 LUCI_TITLE:=Support for WireGuard VPN
 LUCI_DEPENDS:=+kmod-wireguard +wireguard-tools
+LUCI_PKGARCH:=all
 
 PKG_MAINTAINER:=Dan Luedtke <mail@danrl.com>
 
index e585324..fa0db34 100644 (file)
@@ -19,7 +19,7 @@ private_key = section:taboption(
   translate("Required. Base64-encoded private key for this interface.")
 )
 private_key.password = true
-private_key.datatype = "rangelength(44, 44)"
+private_key.datatype = "and(base64,rangelength(44,44))"
 private_key.optional = false
 
 
@@ -52,7 +52,7 @@ metric = section:taboption(
   Value,
   "metric",
   translate("Metric"),
-  translate("Optional.")
+  translate("Optional")
 )
 metric.datatype = "uinteger"
 metric.placeholder = "0"
@@ -66,22 +66,20 @@ mtu = section:taboption(
   translate("MTU"),
   translate("Optional. Maximum Transmission Unit of tunnel interface.")
 )
-mtu.datatype = "range(1280,1423)"
-mtu.placeholder = "1423"
+mtu.datatype = "range(1280,1420)"
+mtu.placeholder = "1420"
 mtu.optional = true
 
-
-preshared_key = section:taboption(
+fwmark = section:taboption(
   "advanced",
   Value,
-  "preshared_key",
-  translate("Preshared Key"),
-  translate("Optional. Adds in an additional layer of symmetric-key " ..
-            "cryptography for post-quantum resistance.")
+  "fwmark",
+  translate("Firewall Mark"),
+  translate("Optional. 32-bit mark for outgoing encrypted packets. " ..
+            "Enter value in hex, starting with <code>0x</code>.")
 )
-preshared_key.password = true
-preshared_key.datatype = "rangelength(44, 44)"
-preshared_key.optional = true
+fwmark.datatype = "hex(4)"
+fwmark.optional = true
 
 
 -- peers -----------------------------------------------------------------------
@@ -102,12 +100,25 @@ public_key = peers:option(
   Value,
   "public_key",
   translate("Public Key"),
-  translate("Required. Public key of peer.")
+  translate("Required. Base64-encoded public key of peer.")
 )
-public_key.datatype = "rangelength(44, 44)"
+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",
@@ -154,5 +165,5 @@ persistent_keepalive = peers:option(
   translate("Optional. Seconds between keep alive messages. " ..
             "Default is 0 (disabled). Recommended value if " ..
             "this device is behind a NAT is 25."))
-persistent_keepalive.datatype = "range(0, 65535)"
+persistent_keepalive.datatype = "range(0,65535)"
 persistent_keepalive.placeholder = "0"
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 6f09bfc..78b98e0 100644 (file)
                        </div>
                <%- end -%>
 
+               <noscript>
+                       <div class="alert-message warning">
+                               <strong><%:JavaScript required!%></strong><br />
+                               <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+                       </div>
+               </noscript>
+
                <div id="maincontent" class="container">
                        <% if category then render_tabmenu(category, cattree) end %>
index 20a41be..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)
@@ -216,8 +216,8 @@ if tree.nodes[category] and tree.nodes[category].ucidata then
 <% if category ~= "freifunk" and category ~= "splash" then %>
 <noscript>
        <div class="errorbox">
-               <strong><%:Java Script required!%></strong><br />
-               <%:You must enable Java Script in your browser or LuCI will not work properly.%>
+               <strong><%:JavaScript required!%></strong><br />
+               <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
        </div>
 </noscript>
 <% end %>
old mode 100755 (executable)
new mode 100644 (file)
index 8419ade..d84fd27
@@ -2,14 +2,14 @@
        Material is a clean HTML5 theme for LuCI. It is based on luci-theme-bootstrap and MUI
 
        luci-theme-material
-       Copyright 2015 Lutty Yang <lutty@wcan.in>
+       Copyright 2015-2017 Lutty Yang <lutty@wcan.in>
 
        Have a bug? Please create an issue here on GitHub!
        https://github.com/LuttyYang/luci-theme-material/issues
 
        luci-theme-bootstrap:
        Copyright 2008 Steven Barth <steven@midlink.org>
-       Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+       Copyright 2008-2016 Jo-Philipp Wich <jow@openwrt.org>
        Copyright 2012 David Menting <david@nut-bolt.nl>
 
        MUI:
@@ -19,7 +19,6 @@
 -%>
 
 <%
-       local ver = require "luci.version"
        local sys  = require "luci.sys"
        local util = require "luci.util"
        local http = require "luci.http"
                end
        end
 
-    -- send as HTML5
+       -- send as HTML5
        http.prepare_content("text/html")
 
        local function nodeurl(prefix, name, query)
-               local url = controller .. prefix .. name .. "/"
+               local u = url(prefix, name)
                if query then
-                       url = url .. http.build_querystring(query)
+                       u = u .. http.build_querystring(query)
                end
-               return pcdata(url)
+               return pcdata(u)
        end
 
-       local function subtree(prefix, node, level)
+       local function render_tabmenu(prefix, node, level)
                if not level then
                        level = 1
                end
 
                local childs = disp.node_childs(node)
                if #childs > 0 then
-
-            if level > 2 then
-%>
-       <ul class="tabs">
-               <%
-            end
+                       if level > 2 then
+                               write('<ul class="tabs">')
+                       end
 
                        local selected_node
                        local selected_name
                                        selected_node = nnode
                                        selected_name = v
                                end
-                if level > 2 then
-               %>
-                       <li class="tabmenu-item-<%=v%><%- if nnode._menu_selected or (node.leaf and v == leaf) then %> active<% end %>">
-                           <a href="<%=nodeurl(prefix, v, nnode.query)%>"><%=striptags(translate(nnode.title))%></a>
-                       </li>
-               <%      end
+
+                               if level > 2 then
+                                       write('<li class="tabmenu-item-%s %s"><a href="%s">%s</a></li>' %{
+                                               v, (nnode._menu_selected or (node.leaf and v == leaf)) and 'active' or '',
+                                               nodeurl(prefix, v, nnode.query),
+                                               striptags(translate(nnode.title))
+                                       })
+                               end
                        end
 
-            if level > 2 then
-               %>
-       </ul>
-<%          end
+                       if level > 2 then
+                               write('</ul>')
+                       end
 
                        if selected_node then
-                               subtree(prefix .. selected_name .. "/", selected_node, level + 1)
+                               render_tabmenu(prefix .. "/" .. selected_name, selected_node, level + 1)
+                       end
+               end
+       end
+
+       local function render_submenu(prefix, node)
+               local childs = disp.node_childs(node)
+               if #childs > 0 then
+                       write('<ul class="slide-menu">')
+
+                       for i, r in ipairs(childs) do
+                               local nnode = node.nodes[r]
+                               local title = pcdata(striptags(translate(nnode.title)))
+
+                               write('<li><a data-title="%s" href="%s">%s</a></li>' %{
+                                       title,
+                                       nodeurl(prefix, r, nnode.query),
+                                       title
+                               })
+                       end
+
+                       write('</ul>')
+               end
+       end
+
+       local function render_topmenu()
+               local childs = disp.node_childs(cattree)
+               if #childs > 0 then
+                       write('<ul class="nav">')
+
+                       for i, r in ipairs(childs) do
+                               local nnode = cattree.nodes[r]
+                               local grandchildren = disp.node_childs(nnode)
+
+                               if #grandchildren > 0 then
+                                       local title = pcdata(striptags(translate(nnode.title)))
+
+                                       write('<li class="slide"><a class="menu" data-title="%s" href="#">%s</a>' %{
+                                               title,
+                                               title
+                                       })
+
+                                       render_submenu(category .. "/" .. r, nnode)
+                                       write('</li>')
+                               else
+                                       local title = pcdata(striptags(translate(nnode.title)))
+
+                                       write('<li><a data-title="%s" href="%s">%s</a></li>' %{
+                                               title,
+                                               nodeurl(category, r, nnode.query),
+                                               title
+                                       })
+                               end
+                       end
+
+                       write('</ul>')
+               end
+       end
+
+       local function render_changes()
+               -- calculate the number of unsaved changes
+               if tree.nodes[category] and tree.nodes[category].ucidata then
+                       local ucichanges = 0
+
+                       for i, j in pairs(require("luci.model.uci").cursor():changes()) do
+                               for k, l in pairs(j) do
+                                       for m, n in pairs(l) do
+                                               ucichanges = ucichanges + 1;
+                                       end
+                               end
+                       end
+
+                       if ucichanges > 0 then
+                               write('<a class="label notice" href="%s?redir=%s">%s: %d</a>' %{
+                                       url(category, 'uci/changes'),
+                                       http.urlencode(http.formvalue('redir') or REQUEST_URI),
+                                       translate('Unsaved Changes'),
+                                       ucichanges
+                               })
                        end
                end
        end
         <link rel="stylesheet" href="<%=resource%>/<%=node.css%>">
     <% end -%>
     <% if css then %>
-        <style title="text/css">
-            <%-= css %>
-        </style>
+        <style title="text/css"><%= css %></style>
     <% end -%>
     <script src="<%=resource%>/xhr.js"></script>
 </head>
-
 <body class="lang_<%=luci.i18n.context.lang%> <%- if node then %><%= striptags( node.title ) %><%- end %> <% if luci.dispatcher.context.authsession then %>logged-in<% end %>">
-
 <header>
        <div class="container">
                <span class="showSide"></span>
                <a class="brand" href="#"><%=boardinfo.hostname or "?"%></a>
                <div class="pull-right">
-               <%
-               -- calculate the number of unsaved changes
-               if tree.nodes[category] and tree.nodes[category].ucidata then
-                       local ucichanges = 0
-                       for i, j in pairs(require("luci.model.uci").cursor():changes()) do
-                               for k, l in pairs(j) do
-                                       for m, n in pairs(l) do
-                                               ucichanges = ucichanges + 1;
-                                       end
-                               end
-                       end
-                       %>
-                       <% if ucichanges > 0 then %>
-                       <a class="label notice" href="<%=controller%>/<%=category%>/uci/changes?redir=<%=http.urlencode(http.formvalue("redir") or REQUEST_URI)%>"><span class="mobile-hide"><%:Unsaved Changes%>: </span><%=ucichanges%></a>
-                       <% end %>
+                       <% render_changes() %>
                        <span id="xhr_poll_status" style="display:none" onclick="XHR.running() ? XHR.halt() : XHR.run()">
-                               <span class="label success" id="xhr_poll_status_on"><span class="mobile-hide"><%:Auto Refresh%> </span><%:on%></span>
-                               <span class="label" id="xhr_poll_status_off" style="display:none"><span class="mobile-hide"><%:Auto Refresh%> </span><%:off%></span>
+                               <span class="label success" id="xhr_poll_status_on"><span class="mobile-hide"><%:Auto Refresh%></span> <%:on%></span>
+                               <span class="label" id="xhr_poll_status_off" style="display:none"><span class="mobile-hide"><%:Auto Refresh%></span> <%:off%></span>
                        </span>
-               <% end %>
                </div>
        </div>
 </header>
-
- <div class="main">
+<div class="main">
         <div style="" class="loading"><span><div class="loading-img"></div>Loading...</span></div>
         <div class="main-left">
-                <ul class="nav">
-                        <%-
-                        local function submenu(prefix, node)
-                        local childs = disp.node_childs(node)
-                        if #childs > 0 then
-                        %>
-                        <ul class="slide-menu">
-                                <%-
-                                for i, r in ipairs(childs) do
-                                local nnode = node.nodes[r]
-                                local href  = controller .. prefix .. r ..
-                                (nnode.query and http.build_querystring(nnode.query) or "")
-                                %>
-                                <li><a data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a></li>
-                                <%-
-                                end
-                                %>
-                        </ul>
-                        <%-
-                        end
-                        end
-
-                        childs = disp.node_childs(cattree)
-
-                        if #childs > 0 then
-                        for i, r in ipairs(childs) do
-                        local nnode = cattree.nodes[r]
-                        local href  = controller .. "/" .. category .. "/" .. r ..
-                        (nnode.query and http.build_querystring(k.query) or "")
-                        local grandchildren = disp.node_childs(nnode)
-
-                        if #grandchildren > 0 then
-                        %>
-                        <li class="slide">
-                                <a class="menu" data-title="<%=pcdata(striptags(nnode.title))%>" href="#"><%=pcdata(striptags(translate(nnode.title)))%></a>
-                                <%- submenu(category .. "/" .. r .. "/", nnode) %>
-                        </li>
-                        <%          else %>
-                        <li>
-                                <a data-title="<%=pcdata(striptags(nnode.title))%>" href="<%=pcdata(href)%>"><%=pcdata(striptags(translate(nnode.title)))%></a>
-                        </li>
-                        <%
-                        end
-                        end
-                        end
-                        %>
-                </ul>
+               <% render_topmenu() %>
         </div>
-        <div class="main-right">
+       <div class="main-right">
                 <div class="darkMask"></div>
                 <div id="maincontent">
                         <div class="container">
                                                 <a href="<%=pcdata(luci.dispatcher.build_url("admin/system/admin"))%>"><%:Go to password configuration...%></a>
                                         </div>
                                 <%- end -%>
-                                <% if category then subtree("/" .. category .. "/", cattree) end %>
-
+                                <% if category then render_tabmenu(category, cattree) end %>
+
+                               <noscript>
+                                       <div class="alert-message warning">
+                                               <strong><%:JavaScript required!%></strong><br />
+                                               <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
+                                       </div>
+                               </noscript>                     
index 505e64b..ae348f3 100644 (file)
        <div id="maincontent">
                <noscript>
                        <div class="errorbox">
-                               <strong><%:Java Script required!%></strong><br />
-                               <%:You must enable Java Script in your browser or LuCI will not work properly.%>
+                               <strong><%:JavaScript required!%></strong><br />
+                               <%:You must enable JavaScript in your browser or LuCI will not work properly.%>
                        </div>
                </noscript>