summaryrefslogtreecommitdiffhomepage
path: root/applications/luci-app-travelmate
diff options
context:
space:
mode:
Diffstat (limited to 'applications/luci-app-travelmate')
-rw-r--r--applications/luci-app-travelmate/Makefile6
-rw-r--r--applications/luci-app-travelmate/luasrc/controller/travelmate.lua34
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua53
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua37
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua37
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua37
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua39
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua203
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua177
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua13
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua168
-rw-r--r--applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua36
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm13
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm20
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm10
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm80
-rw-r--r--applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm96
-rw-r--r--applications/luci-app-travelmate/po/ja/travelmate.po601
-rw-r--r--applications/luci-app-travelmate/po/pt-br/travelmate.po416
-rw-r--r--applications/luci-app-travelmate/po/ru/travelmate.po390
-rw-r--r--applications/luci-app-travelmate/po/templates/travelmate.pot324
21 files changed, 2398 insertions, 392 deletions
diff --git a/applications/luci-app-travelmate/Makefile b/applications/luci-app-travelmate/Makefile
index f4b1b0a4e..6170f9d4c 100644
--- a/applications/luci-app-travelmate/Makefile
+++ b/applications/luci-app-travelmate/Makefile
@@ -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
diff --git a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
index 27c19c4e5..ef79c7406 100644
--- a/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
+++ b/applications/luci-app-travelmate/luasrc/controller/travelmate.lua
@@ -1,11 +1,41 @@
--- Licensed to the public under the Apache License 2.0.
+-- Copyright 2017-2018 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
+
+ if nixio.fs.access("/var/log/messages") then
+ logfile = util.trim(util.exec("cat /var/log/messages | grep 'travelmate-'"))
+ else
+ logfile = util.trim(util.exec("logread -e 'travelmate-'"))
+ end
+ 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
index fa44d4b52..000000000
--- a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate.lua
+++ /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
index 000000000..e5a048fa8
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_firewall_tab.lua
@@ -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
index 000000000..0096d6a8c
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_network_tab.lua
@@ -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
index 000000000..7ef9920a0
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/cfg_wireless_tab.lua
@@ -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
index 000000000..8a20ab9cc
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/configuration_tab.lua
@@ -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
index 000000000..1ea2d6672
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/overview_tab.lua
@@ -0,0 +1,203 @@
+-- Copyright 2017-2018 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 util = require("luci.util")
+local nw = require("luci.model.network").init()
+local fw = require("luci.model.firewall").init()
+local dump = util.ubus("network.interface", "dump", {})
+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
+
+-- Interface Wizard
+
+if uplink == "" then
+ ds = m:section(NamedSection, "global", "travelmate", translate("Interface Wizard"))
+
+ o = ds:option(Value, "", translate("Uplink interface"))
+ o.datatype = "and(uciname,rangelength(3,15))"
+ o.default = trmiface
+ o.rmempty = false
+
+ btn = ds: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)
+ 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
+
+s = m:section(NamedSection, "global", "travelmate")
+
+o1 = s:option(Flag, "trm_enabled", translate("Enable travelmate"))
+o1.default = o1.disabled
+o1.rmempty = false
+
+o2 = s:option(Flag, "trm_automatic", translate("Enable 'automatic' mode"),
+ translate("Keep travelmate in an active state. Check every n seconds the connection status, i.e. the uplink availability."))
+o2.default = o2.enabled
+o2.rmempty = false
+
+o3 = s:option(ListValue, "trm_iface", translate("Uplink / Trigger interface"),
+ translate("Name of the used uplink interface."))
+if dump then
+ local i, v
+ for i, v in ipairs(dump.interface) do
+ if v.interface ~= "loopback" and v.interface ~= "lan" then
+ o3:value(v.interface)
+ end
+ end
+end
+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
+
+btn = s:option(Button, "", translate("Manual Rescan"),
+ translate("Force a manual uplink rescan / reconnect in 'trigger' mode."))
+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
+
+-- Runtime information
+
+ds = m:section(NamedSection, "global", "travelmate", translate("Runtime Information"))
+
+dv1 = ds:option(DummyValue, "status", translate("Travelmate Status"))
+dv1.template = "travelmate/runtime"
+if parse == nil then
+ dv1.value = translate("n/a")
+elseif parse.data.travelmate_status == "connected" then
+ dv1.value = translate("connected")
+elseif parse.data.travelmate_status == "not connected" then
+ dv1.value = translate("not connected")
+elseif parse.data.travelmate_status == "running" then
+ dv1.value = translate("running")
+elseif parse.data.travelmate_status == "error" then
+ dv1.value = translate("error")
+end
+
+dv2 = ds: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 = ds:option(DummyValue, "station_id", translate("Station ID (SSID/BSSID)"))
+dv3.template = "travelmate/runtime"
+if parse ~= nil then
+ dv3.value = parse.data.station_id or translate("n/a")
+else
+ dv3.value = translate("n/a")
+end
+
+dv4 = ds: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 = ds: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 = ds: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(Flag, "trm_debug", translate("Enable verbose debug logging"))
+e1.default = e1.disabled
+e1.rmempty = false
+
+e2 = e:option(Value, "trm_radio", translate("Radio selection"),
+ translate("Restrict travelmate to a dedicated radio, e.g. 'radio0'."))
+e2.datatype = "and(uciname,rangelength(6,6))"
+e2.rmempty = true
+
+e3 = 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."))
+e3.default = 3
+e3.datatype = "range(0,30)"
+e3.rmempty = false
+
+e4 = e:option(Value, "trm_maxwait", translate("Interface Timeout"),
+ translate("How long should travelmate wait for a successful wlan interface reload."))
+e4.default = 30
+e4.datatype = "range(5,60)"
+e4.rmempty = false
+
+e5 = e:option(Value, "trm_timeout", translate("Overall Timeout"),
+ translate("Timeout in seconds between retries in 'automatic' mode."))
+e5.default = 60
+e5.datatype = "range(60,300)"
+e5.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
index 000000000..93e8a05cf
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_add.lua
@@ -0,0 +1,177 @@
+-- Copyright 2017-2018 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"
+local encr_psk = {"psk", "psk2", "psk-mixed"}
+local encr_wpa = {"wpa", "wpa2", "wpa-mixed"}
+
+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"),
+ bssid = http.formvalue("bssid"),
+ 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.datatype = "rangelength(1,32)"
+ wssid.default = m.hidden.ssid or ""
+else
+ wssid = m:field(Value, "ssid", translate("SSID (hidden)"))
+end
+
+nobssid = m:field(Flag, "no_bssid", translate("Ignore BSSID"))
+nobssid.default = nobssid.enabled
+
+bssid = m:field(Value, "bssid", translate("BSSID"))
+bssid:depends("no_bssid", 0)
+bssid.datatype = "macaddr"
+bssid.default = m.hidden.bssid or ""
+
+if (tonumber(m.hidden.wep) or 0) == 1 then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wep", "WEP")
+ encr:value("wep+open", "WEP Open System")
+ encr:value("wep+mixed", "WEP mixed")
+ encr:value("wep+shared", "WEP Shared Key")
+ encr.default = "wep+open"
+
+ wkey = m:field(Value, "key", translate("WEP-Passphrase"))
+ wkey.password = true
+ wkey.datatype = "wepkey"
+elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
+ if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("psk2", "WPA2 PSK")
+ encr.default = encr_psk[tonumber(m.hidden.wpa_version)] or "psk2"
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = "auto"
+
+ wkey = m:field(Value, "key", translate("WPA-Passphrase"))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+ elseif m.hidden.wpa_suites == "802.1X" then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wpa", "WPA Enterprise")
+ encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
+ encr:value("wpa2", "WPA2 Enterprise")
+ encr.default = encr_wpa[tonumber(m.hidden.wpa_version)] or "wpa2"
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = "auto"
+
+ eaptype = m:field(ListValue, "eap_type", translate("EAP-Method"))
+ eaptype:value("tls", "TLS")
+ eaptype:value("ttls", "TTLS")
+ eaptype:value("peap", "PEAP")
+ eaptype:value("fast", "FAST")
+ eaptype.default = "peap"
+
+ authentication = m:field(ListValue, "auth", translate("Authentication"))
+ authentication:value("PAP")
+ authentication:value("CHAP")
+ authentication:value("MSCHAP")
+ authentication:value("MSCHAPV2")
+ authentication:value("EAP-GTC")
+ authentication:value("EAP-MD5")
+ authentication:value("EAP-MSCHAPV2")
+ authentication:value("EAP-TLS")
+ authentication:value("auth=PAP")
+ authentication:value("auth=MSCHAPV2")
+ authentication.default = "EAP-MSCHAPV2"
+
+ ident = m:field(Value, "identity", translate("Identity"))
+
+ wkey = m:field(Value, "password", translate("Password"))
+ wkey.password = true
+ wkey.datatype = "wpakey"
+
+ cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
+ cacert.rmempty = true
+
+ clientcert = m:field(Value, "client_cert", translate("Path to Client-Certificate"))
+ clientcert:depends("eap_type","tls")
+ clientcert.rmempty = true
+
+ privkey = m:field(Value, "priv_key", translate("Path to Private Key"))
+ privkey:depends("eap_type","tls")
+ privkey.rmempty = true
+
+ privkeypwd = m:field(Value, "priv_key_pwd", translate("Password of Private Key"))
+ privkeypwd:depends("eap_type","tls")
+ privkeypwd.datatype = "wpakey"
+ privkeypwd.password = true
+ privkeypwd.rmempty = true
+ end
+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),
+ bssid = bssid:formvalue(section),
+ disabled = "1"
+ })
+
+ if (tonumber(m.hidden.wep) or 0) == 1 then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
+ elseif (tonumber(m.hidden.wpa_version) or 0) > 0 then
+ if m.hidden.wpa_suites == "PSK" or m.hidden.wpa_suites == "PSK2" then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", newsection, "key", wkey:formvalue(section) or "")
+ elseif m.hidden.wpa_suites == "802.1X" then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", newsection, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", newsection, "eap_type", eaptype:formvalue(section))
+ uci:set("wireless", newsection, "auth", authentication:formvalue(section))
+ uci:set("wireless", newsection, "identity", ident:formvalue(section) or "")
+ uci:set("wireless", newsection, "password", wkey:formvalue(section) or "")
+ uci:set("wireless", newsection, "ca_cert", cacert:formvalue(section) or "")
+ uci:set("wireless", newsection, "client_cert", clientcert:formvalue(section) or "")
+ uci:set("wireless", newsection, "priv_key", privkey:formvalue(section) or "")
+ uci:set("wireless", newsection, "priv_key_pwd", privkeypwd:formvalue(section) or "")
+ end
+ else
+ uci:set("wireless", newsection, "encryption", "none")
+ end
+ uci:save("wireless")
+ uci:commit("wireless")
+ http.redirect(luci.dispatcher.build_url("admin/services/travelmate/stations"))
+end
+
+return m
diff --git a/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
new file mode 100644
index 000000000..0c3cc1865
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_delete.lua
@@ -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
index 000000000..ee4d342ea
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_edit.lua
@@ -0,0 +1,168 @@
+-- Copyright 2017-2018 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.datatype = "rangelength(1,32)"
+ wssid.default = s.ssid or ""
+
+ bssid = m:field(Value, "bssid", translate("BSSID"))
+ bssid.datatype = "macaddr"
+ bssid.default = s.bssid or ""
+
+ s.cipher = "auto"
+ if string.match(s.encryption, '\+') and not string.match(s.encryption, '^wep') then
+ s.pos = string.find(s.encryption, '\+')
+ s.cipher = string.sub(s.encryption, s.pos + 1)
+ s.encryption = string.sub(s.encryption, 0, s.pos - 1)
+ end
+
+ if s.encryption and s.encryption ~= "none" then
+ if string.match(s.encryption, '^wep') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wep", "WEP")
+ encr:value("wep+open", "WEP Open System")
+ encr:value("wep+mixed", "WEP mixed")
+ encr:value("wep+shared", "WEP Shared Key")
+ encr.default = s.encryption
+
+ wkey = m:field(Value, "key", translate("Passphrase"))
+ wkey.datatype = "wepkey"
+ elseif string.match(s.encryption, '^psk') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("psk", "WPA PSK")
+ encr:value("psk-mixed", "WPA/WPA2 mixed")
+ encr:value("psk2", "WPA2 PSK")
+ encr.default = s.encryption
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = s.cipher
+
+ wkey = m:field(Value, "key", translate("Passphrase"))
+ wkey.datatype = "wpakey"
+ elseif string.match(s.encryption, '^wpa') then
+ encr = m:field(ListValue, "encryption", translate("Encryption"))
+ encr:value("wpa", "WPA Enterprise")
+ encr:value("wpa-mixed", "WPA/WPA2 Enterprise mixed")
+ encr:value("wpa2", "WPA2 Enterprise")
+ encr.default = s.encryption
+
+ ciph = m:field(ListValue, "cipher", translate("Cipher"))
+ ciph:value("auto", translate("Automatic"))
+ ciph:value("ccmp", translate("Force CCMP (AES)"))
+ ciph:value("tkip", translate("Force TKIP"))
+ ciph:value("tkip+ccmp", translate("Force TKIP and CCMP (AES)"))
+ ciph.default = s.cipher
+
+ eaptype = m:field(ListValue, "eap_type", translate("EAP-Method"))
+ eaptype:value("tls", "TLS")
+ eaptype:value("ttls", "TTLS")
+ eaptype:value("peap", "PEAP")
+ eaptype:value("fast", "FAST")
+ eaptype.default = s.eap_type or "peap"
+
+ authentication = m:field(ListValue, "auth", translate("Authentication"))
+ authentication:value("PAP")
+ authentication:value("CHAP")
+ authentication:value("MSCHAP")
+ authentication:value("MSCHAPV2")
+ authentication:value("EAP-GTC")
+ authentication:value("EAP-MD5")
+ authentication:value("EAP-MSCHAPV2")
+ authentication:value("EAP-TLS")
+ authentication:value("auth=PAP")
+ authentication:value("auth=MSCHAPV2")
+ authentication.default = s.auth or "EAP-MSCHAPV2"
+
+ ident = m:field(Value, "identity", translate("Identity"))
+ ident.default = s.identity or ""
+
+ wkey = m:field(Value, "password", translate("Passphrase"))
+ wkey.datatype = "wpakey"
+
+ cacert = m:field(Value, "ca_cert", translate("Path to CA-Certificate"))
+ cacert.rmempty = true
+ cacert.default = s.ca_cert or ""
+
+ clientcert = m:field(Value, "client_cert", translate("Path to Client-Certificate"))
+ clientcert:depends("eap_type","tls")
+ clientcert.rmempty = true
+ clientcert.default = s.client_cert or ""
+
+ privkey = m:field(Value, "priv_key", translate("Path to Private Key"))
+ privkey:depends("eap_type","tls")
+ privkey.rmempty = true
+ privkey.default = s.priv_key or ""
+
+ privkeypwd = m:field(Value, "priv_key_pwd", translate("Password of Private Key"))
+ privkeypwd:depends("eap_type","tls")
+ privkeypwd.datatype = "wpakey"
+ privkeypwd.password = true
+ privkeypwd.rmempty = true
+ privkeypwd.default = s.priv_key_pwd or ""
+ end
+ wkey.password = true
+ wkey.default = s.key or s.password
+ end
+else
+ m.on_cancel()
+end
+
+function wssid.write(self, section, value)
+ uci:set("wireless", m.hidden.cfg, "ssid", wssid:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "bssid", bssid:formvalue(section))
+ if s.encryption and s.encryption ~= "none" then
+ if string.match(s.encryption, '^wep') then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
+ elseif string.match(s.encryption, '^psk') then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", m.hidden.cfg, "key", wkey:formvalue(section) or "")
+ elseif string.match(s.encryption, '^wpa') then
+ if ciph:formvalue(section) ~= "auto" then
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section) .. "+" .. ciph:formvalue(section))
+ else
+ uci:set("wireless", m.hidden.cfg, "encryption", encr:formvalue(section))
+ end
+ uci:set("wireless", m.hidden.cfg, "eap_type", eaptype:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "auth", authentication:formvalue(section))
+ uci:set("wireless", m.hidden.cfg, "identity", ident:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "password", wkey:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "ca_cert", cacert:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "client_cert", clientcert:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "priv_key", privkey:formvalue(section) or "")
+ uci:set("wireless", m.hidden.cfg, "priv_key_pwd", privkeypwd:formvalue(section) or "")
+ end
+ 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
index 000000000..6eb4c7206
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/model/cbi/travelmate/wifi_order.lua
@@ -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
index 000000000..2233a15e3
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/config_css.htm
@@ -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-travelmate/luasrc/view/travelmate/logread.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
new file mode 100644
index 000000000..6cbeaffde
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/logread.htm
@@ -0,0 +1,20 @@
+<%#
+Copyright 2017-2018 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>
+
+<script type="text/javascript">
+ var textarea = document.getElementById('logread_id');
+ textarea.scrollTop = textarea.scrollHeight;
+</script>
+
+<%+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
index 000000000..e7827b5c3
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/runtime.htm
@@ -0,0 +1,10 @@
+<%#
+Copyright 2017-2018 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="outline:none;border:none;box-shadow:none;background:transparent;color:#0069d6;font-weight:bold;line-height:30px;height:30px;" value="<%=self:cfgvalue(section)%>" disabled="disabled" />
+
+<%+cbi/valuefooter%>
diff --git a/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
new file mode 100644
index 000000000..ae1ea797a
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/stations.htm
@@ -0,0 +1,80 @@
+<%#
+Copyright 2017-2018 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"><%:BSSID%></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 bssid = s.bssid or "-"
+ local encryption = s.encryption or "-"
+ local disabled = s.disabled or ""
+ local style = "text-align:left;color:#000000"
+ if disabled == "0" then
+ style = "text-align:left;color:#0069d6;font-weight:bold"
+ end
+%>
+ <tr class="cbi-section-table-row cbi-rowstyle-1" style="<%=style%>">
+ <td style="<%=style%>"><%=device%></td>
+ <td style="<%=style%>"><%=ssid%></td>
+ <td style="<%=style%>"><%=bssid%></td>
+ <td style="<%=style%>"><%=encryption%></td>
+ <td class="cbi-value-field" style="width:80px">
+ <input class="cbi-button cbi-button-up" type="button" value="" onclick="location.href='<%=luci.dispatcher.build_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='<%=luci.dispatcher.build_url('admin/services/travelmate/wifiorder')%>?cfg=<%=section%>;dir=down'" alt="<%:Move down%>" title="<%:Move down%>"/>
+ </td>
+ <td class="cbi-value-field" style="width:150px">
+ <input type="button" class="cbi-button cbi-button-edit" onclick="location.href='<%=luci.dispatcher.build_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='<%=luci.dispatcher.build_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="<%=luci.dispatcher.build_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
index 000000000..a8f63a17e
--- /dev/null
+++ b/applications/luci-app-travelmate/luasrc/view/travelmate/wifi_scan.htm
@@ -0,0 +1,96 @@
+<%#
+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)
+ local wpa_label = {translate("WPA"), translate("WPA2"), translate("WPA/WPA2")}
+
+ 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 "%s (%s/%s)" %{wpa_label[info.wpa], table.concat(info.auth_suites), table.concat(info.group_ciphers)}
+ elseif info.enabled then
+ return translate("Unknown")
+ else
+ return translate("Open")
+ end
+ end
+
+ function percent_wifi_signal(info)
+ local qc = info.quality or 0
+ local qm = info.quality_max or 0
+ if info.bssid and qc > 0 and qm > 0 then
+ return math.floor((100 / qm) * qc)
+ else
+ return 0
+ end
+ end
+-%>
+
+<%+header%>
+
+<div class="cbi-map">
+<h2 name="content"><%:Wireless Scan%></h2>
+ <fieldset class="cbi-section">
+ <table class="cbi-section-table" style="empty-cells:hide">
+ <tr class="cbi-section-table-titles">
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink SSID%></th>
+ <th class="cbi-section-table-cell" style="text-align:left"><%:Uplink BSSID%></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">
+ <%=net.ssid and utl.pcdata(net.ssid) or "<em>%s</em>" % translate("hidden")%>
+ </td>
+ <td class="cbi-value-field" style="text-align:left">
+ <%=net.bssid and utl.pcdata(net.bssid)%>
+ </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="<%=luci.dispatcher.build_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="bssid" value="<%=utl.pcdata(net.bssid)%>"/>
+ <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="<%=luci.dispatcher.build_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="<%=luci.dispatcher.build_url('admin/services/travelmate/stations')%>" method="post">
+ <input class="cbi-button cbi-button-reset" type="submit" value="<%:Back to overview%>"/>
+ </form>
+</div>
+</div>
+
+<%+footer%>
diff --git a/applications/luci-app-travelmate/po/ja/travelmate.po b/applications/luci-app-travelmate/po/ja/travelmate.po
index 52707bcf1..56e3badab 100644
--- a/applications/luci-app-travelmate/po/ja/travelmate.po
+++ b/applications/luci-app-travelmate/po/ja/travelmate.po
@@ -7,333 +7,378 @@ msgstr ""
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
-"X-Generator: Poedit 2.0.1\n"
+"X-Generator: Poedit 2.0.5\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 "Authentication"
+msgstr "認証"
+
+msgid "Automatic"
+msgstr "自動"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Back to overview"
+msgstr "概要へ戻る"
+
+msgid "Cipher"
+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 "Create Uplink Interface"
+msgstr "アップリンク インターフェースの作成"
+
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+"新規の無線 WAN アップリンク インターフェースを作成し、 DHCP を使用するよう構"
+"成して"
+
+msgid "Delete"
+msgstr "削除"
+
+msgid "Delete this Uplink"
+msgstr "このアップリンクを削除"
+
+msgid "Device"
+msgstr "デバイス"
+
+msgid "EAP-Method"
+msgstr "EAP メソッド"
+
+msgid "Edit"
+msgstr "編集"
+
+msgid "Edit Firewall Configuration"
+msgstr "ファイアウォール設定の編集"
+
+msgid "Edit Network Configuration"
+msgstr "ネットワーク設定の編集"
-msgid "Debug logging"
-msgstr "デバッグ ログ"
+msgid "Edit Travelmate Configuration"
+msgstr "Travelmate 設定の編集"
-msgid "Default 20, range 10-60"
-msgstr "既定値 20、範囲 10 - 60"
+msgid "Edit Wireless Configuration"
+msgstr "無線設定の編集"
-msgid "Default 3, range 1-10"
-msgstr "既定値 3、範囲 1 - 10"
+msgid "Edit Wireless Uplink Configuration"
+msgstr "無線アップリンク設定の編集"
-msgid "Disable this if you want to use iwinfo instead of iw"
-msgstr "iw の代わりに iwinfo を使用したい場合、この設定を無効にします。"
+msgid "Edit this Uplink"
+msgstr "このアップリンクを編集"
-msgid "Enable Travelmate"
-msgstr "Travelmateの有効化"
+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 "Force CCMP (AES)"
+msgstr "CCMP (AES)"
+
+msgid "Force TKIP"
+msgstr "TKIP"
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr "TKIP と CCMP (AES)"
-msgid "Link to detailed advice"
-msgstr "詳細な解説へのリンク"
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+"'trigger' モード時に、手動でアップリンクの再スキャンと再接続を行います。"
+
+msgid "How long should travelmate wait for a successful wlan interface reload."
+msgstr ""
+"無線LAN インターフェースのリロードが成功するまでの、Travelmate の待機時間で"
+"す。"
-msgid "Max. number of connection retries to an uplink"
-msgstr "確立までの接続試行回数"
+msgid "How many times should travelmate try to connect to an Uplink."
+msgstr "Travelmate がアップリンクへの接続を試行する回数です。"
-msgid "Max. timeout in seconds for wlan interface reload"
-msgstr "無線LANインターフェース リロード時の最大待機時間(秒)"
+msgid "Identity"
+msgstr "ID"
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "リロード トリガを特定のインターフェースに限定する"
+msgid "Ignore BSSID"
+msgstr "BSSID の無視"
+
+msgid "Input file not found, please check your configuration."
+msgstr "入力ファイルが見つかりません。設定を確認してください。"
+
+msgid "Interface Timeout"
+msgstr "インターフェース タイムアウト"
+
+msgid "Interface Wizard"
+msgstr "インターフェース ウィザード"
msgid ""
-"Space separated list of wwan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"Keep travelmate in an active state. Check every n seconds the connection "
+"status, i.e. the uplink availability."
msgstr ""
-"リロード動作のトリガとなる、スペースで区切られたWWAN インターフェースのリスト"
-"です。リロードのトリガを無効にするには、'false' を設定します。既定値:(空)"
+"Travelmate をアクティブ状態で維持します。\"実行間隔\" で設定された時間毎"
+"(秒)に、アップリンクの可用性を確認するために接続状態をチェックします"
-msgid "Travelmate"
-msgstr "Travelmate"
+msgid "Last rundate"
+msgstr "最終実行日時"
-msgid "Use iw for scanning"
-msgstr "スキャンに iw を使用する"
+msgid "Manual Rescan"
+msgstr "手動再スキャン"
-#~ msgid "<br />&nbsp;Network Interface 'trm_wwan' created successfully."
-#~ msgstr ""
-#~ "<br />&nbsp;ネットワーク インターフェース 'trm_wwan' の作成に成功しまし"
-#~ "た。"
+msgid "Move down"
+msgstr "下へ"
-#~ msgid "Add Interface"
-#~ msgstr "インターフェースの追加"
+msgid "Move up"
+msgstr "上へ"
-#~ msgid ""
-#~ "Additional trigger delay in seconds before travelmate processing begins."
-#~ msgstr "Travelmate の処理が開始されるまでの、追加の遅延時間(秒)です。"
+msgid "Name of the used uplink interface."
+msgstr "使用されるアップリンク インターフェースの名前です。"
-#~ msgid "Advanced"
-#~ msgstr "詳細設定"
+msgid "Open"
+msgstr "オープン"
-#~ msgid ""
-#~ "Automatically create a new wireless wan uplink interface 'trm_wwan', "
-#~ "configure it to use dhcp and"
-#~ msgstr ""
-#~ "新しい無線 WAN インターフェース 'trm_wwan' を自動的に作成し、 DHCP を使用"
-#~ "するよう構成して"
+msgid ""
+"Options for further tweaking in case the defaults are not suitable for you."
+msgstr "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。"
-#~ msgid ""
-#~ "Configuration of the travelmate package to to enable travel router "
-#~ "functionality."
-#~ msgstr ""
-#~ "トラベル ルーター機能を有効化するための、 Travelmate パッケージの設定で"
-#~ "す。"
+msgid "Overall Timeout"
+msgstr "実行間隔"
-#~ msgid "Connection Limit"
-#~ msgstr "接続制限"
+msgid "Overview"
+msgstr "概要"
-#~ msgid "Create Uplink Interface"
-#~ msgstr "アップリンク インターフェースの作成"
+msgid "Passphrase"
+msgstr "パスフレーズ"
-#~ msgid "Edit Firewall Configuration"
-#~ msgstr "ファイアウォール設定の編集"
+msgid "Password"
+msgstr "パスワード"
-#~ msgid "Edit Network Configuration"
-#~ msgstr "ネットワーク設定の編集"
+msgid "Password of Private Key"
+msgstr "秘密鍵のパスワード"
-#~ msgid "Edit Travelmate Configuration"
-#~ msgstr "Travelmate 設定の編集"
+msgid "Path to CA-Certificate"
+msgstr "CA 証明書へのパス"
+
+msgid "Path to Client-Certificate"
+msgstr "クライアント証明書へのパス"
+
+msgid "Path to Private Key"
+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 ""
+"Travelmate 用インターフェース(%s)に設定済みの全アップリンクの一覧です。既存"
+"のアップリンクの編集や削除、並べ替えを行ったり、スキャンを行って新規アップリ"
+"ンクを追加することができます。現在使用されているアップリンクは、青色で強調さ"
+"れます。"
-#~ msgid "Edit Wireless Configuration"
-#~ msgstr "無線設定の編集"
+msgid "Radio selection"
+msgstr "無線の選択"
-#~ msgid "Enable 'automatic' mode"
-#~ msgstr "'automatic' モードの有効化"
+msgid "Repeat scan"
+msgstr "再スキャン"
-#~ msgid "Enable travelmate"
-#~ msgstr "Travelmate の有効化"
+msgid "Rescan"
+msgstr "再スキャン"
-#~ msgid "Enable verbose debug logging"
-#~ msgstr "詳細なデバッグ ログの有効化"
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr "Travelmate が指定された無線に接続するよう制御します。(例: 'radio0')"
-#~ msgid ""
-#~ "For further information <a href=\"%s\" target=\"_blank\">see online "
-#~ "documentation</a>"
-#~ msgstr ""
-#~ "詳細な情報は <a href=\"%s\" target=\"_blank\">オンライン ドキュメント</a>"
-#~ "を確認してください。"
+msgid "Runtime Information"
+msgstr "実行情報"
-#~ 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 "Interface Setup"
-#~ msgstr "インターフェース設定"
-
-#~ msgid "Interface Timeout"
-#~ msgstr "インターフェース タイムアウト"
-
-#~ msgid "Keep travelmate in an active state."
-#~ msgstr "Travelmate をアクティブ状態で維持します。"
-
-#~ msgid "Last rundate"
-#~ msgstr "最終実行日時"
+msgid "SSID"
+msgstr "SSID"
-#~ msgid "Online Status"
-#~ msgstr "オンライン ステータス"
+msgid "SSID (hidden)"
+msgstr "SSID(ステルス)"
-#~ msgid ""
-#~ "Options for further tweaking in case the defaults are not suitable for "
-#~ "you."
-#~ msgstr ""
-#~ "デフォルトの設定が適切でない場合、さらに設定するためのオプションです。"
-
-#~ msgid "Overall Timeout"
-#~ msgstr "全体タイムアウト"
-
-#~ msgid "Overview"
-#~ msgstr "概要"
-
-#~ msgid "Radio selection"
-#~ msgstr "無線の選択"
+msgid "Save"
+msgstr "保存"
-#~ msgid "Restrict interface trigger to certain interface(s)"
-#~ msgstr "インターフェース トリガーを特定のインターフェースに限定する"
+msgid "Scan"
+msgstr "スキャン:"
+
+msgid "Signal strength"
+msgstr "信号強度"
+
+msgid "Station ID (SSID/BSSID)"
+msgstr "ステーション ID (SSID / BSSID)"
+
+msgid "Station Interface"
+msgstr "ステーション インターフェース"
+
+msgid "Station Radio"
+msgstr "ステーション電波"
+
+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 "Travelmate Logfile"
+msgstr "Travelmate ログファイル"
+
+msgid "Travelmate Status"
+msgstr "Travelmate ステータス"
+
+msgid "Travelmate Version"
+msgstr "Travelmate バージョン"
+
+msgid "Trigger delay"
+msgstr "トリガー遅延"
+
+msgid "Unknown"
+msgstr "不明"
+
+msgid "Uplink / Trigger interface"
+msgstr "アップリンク / トリガー インターフェース"
+
+msgid "Uplink BSSID"
+msgstr "アップリンク BSSID"
+
+msgid "Uplink SSID"
+msgstr "アップリンク SSID"
+
+msgid "Uplink interface"
+msgstr "アップリンク インターフェース"
+
+msgid "View Logfile"
+msgstr "ログファイルの確認"
+
+msgid "WEP"
+msgstr "WEP"
+
+msgid "WEP-Passphrase"
+msgstr "WEP パスフレーズ"
+
+msgid "WPA"
+msgstr "WPA"
+
+msgid "WPA-Passphrase"
+msgstr "WPA パスフレーズ"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+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 "Restrict travelmate to a dedicated radio, e.g. 'radio0'"
-#~ msgstr "Travelmate が特定の無線に接続するようにします。例: 'radio0'"
-
-#~ msgid "Runtime information"
-#~ msgstr "実行情報"
-
-#~ msgid ""
-#~ "Scan &amp; Add new wireless stations via standard <a href=\"%s\">Wireless "
-#~ "Setup</a>"
-#~ msgstr ""
-#~ "通常の<a href=\"%s\">無線設定</a>にて、新規の無線ステーションのスキャン及"
-#~ "び追加を行います。"
-
-#~ msgid ""
-#~ "Space separated list of interfaces that trigger travelmate processing. To "
-#~ "disable event driven (re-)starts remove all entries."
-#~ msgstr ""
-#~ "Travelmate の処理のトリガーとなる、スペースで区切られたインターフェースの"
-#~ "リストです。処理を発生させるイベントを無効にするには、全てのエントリーを削"
-#~ "除して空欄にします。"
+msgid "connected"
+msgstr "接続済"
-#~ msgid "Station Interface"
-#~ msgstr "ステーション インターフェース"
+msgid "error"
+msgstr "エラー"
-#~ msgid "Station Radio"
-#~ msgstr "ステーション 無線"
+msgid "hidden"
+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 "Travelmate Logfile"
-#~ msgstr "Travelmate ログファイル"
-
-#~ msgid "Travelmate version"
-#~ msgstr "Travelmate バージョン"
-
-#~ msgid "Trigger delay"
-#~ msgstr "トリガー遅延"
-
-#~ msgid "View Logfile"
-#~ msgstr "ログファイルの確認"
-
-#~ msgid ""
-#~ "add it to the wan zone of the firewall. This step has only to be done "
-#~ "once."
-#~ msgstr ""
-#~ "ファイアウォールの wan ゾーンに追加します。このステップは、一度だけ実行さ"
-#~ "れる必要があります。"
-
-#~ msgid "connected"
-#~ msgstr "接続済み"
-
-#~ msgid "n/a"
-#~ msgstr "利用不可"
-
-#~ msgid "not connected"
-#~ msgstr "未接続"
-
-#~ msgid "."
-#~ msgstr "。"
-
-#~ msgid ""
-#~ "Automatically create a new wireless wan interface, configure it to use "
-#~ "dhcp and add it to the wan zone of the firewall. This step has only to be "
-#~ "done once."
-#~ msgstr ""
-#~ "新しい無線 WAN インターフェースを自動的に作成し、DHCP を使用するよう構成し"
-#~ "てファイアウォールの wan ゾーンに追加します。このステップは、一度だけ実行"
-#~ "する必要があります。"
-
-#~ msgid "Direct Link: <a href=\"%s\">Wireless Setup</a>"
-#~ msgstr "ダイレクト リンク: <a href=\"%s\">無線設定</a>"
-
-#~ msgid "For further information"
-#~ msgstr "詳細情報は"
-
-#~ msgid "Name of the new wireless wan interface"
-#~ msgstr "新しい無線 WAN のインターフェース名"
-
-#~ msgid ""
-#~ "Network Interface '%s' created successfully. Feel free to scan & add new "
-#~ "stations via standard wireless setup."
-#~ msgstr ""
-#~ "ネットワーク インターフェース '%s' の作成に成功しました。通常の無線設定に"
-#~ "て、スキャン及び新規ステーションの追加が可能です。"
-
-#~ msgid "Setup WWAN Interface"
-#~ msgstr "WWAN インターフェース設定"
-
-#~ msgid ""
-#~ "The allowed characters are: <code>A-Z</code>, <code>a-z</code>, "
-#~ "<code>0-9</code> and <code>_</code> (3-15 characters)."
-#~ msgstr ""
-#~ "使用可能文字: <code>A-Z</code>, <code>a-z</code>, <code>0-9</code> and "
-#~ "<code>_</code>(3 - 15文字)"
-
-#~ msgid "The given network interface name already exist"
-#~ msgstr "入力されたネットワーク インターフェース名は、既に存在しています。"
-
-#~ msgid "see online documentation"
-#~ msgstr "オンライン ドキュメントを確認してください"
-
-#~ msgid "Default 3, range 0-10. Set to 0 to allow unlimited retries"
-#~ msgstr "既定値 3、範囲 0 - 10。再試行回数を制限しない場合、0 に設定します。"
-
-#~ msgid "Default 30, range 5-60"
-#~ msgstr "既定値 30、範囲 5 - 60"
-
-#~ msgid "Default: empty = use all radios."
-#~ msgstr "デフォルト:(空)= 全ての無線を使用"
+msgid "n/a"
+msgstr "利用不可"
-#~ msgid "Loop timeout in seconds for wlan monitoring"
-#~ msgstr "無線LAN モニターのループ タイムアウト(秒)"
+msgid "not connected"
+msgstr "未接続"
-#~ msgid "Use only one radio, e.g. 'radio0'"
-#~ msgstr "単一の無線のみ使用する 例: 'radio0'"
+msgid "running"
+msgstr "実行中"
diff --git a/applications/luci-app-travelmate/po/pt-br/travelmate.po b/applications/luci-app-travelmate/po/pt-br/travelmate.po
index bcfc1cfa2..cf17b024e 100644
--- a/applications/luci-app-travelmate/po/pt-br/travelmate.po
+++ b/applications/luci-app-travelmate/po/pt-br/travelmate.po
@@ -12,67 +12,407 @@ msgstr ""
"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 ""
-"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 "Authentication"
+msgstr ""
+
+msgid "Automatic"
+msgstr ""
+
+msgid "BSSID"
+msgstr ""
+
+msgid "Back to overview"
+msgstr ""
+
+msgid "Cipher"
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 "
+"Configuration of the travelmate package to 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 "Connection Limit"
+msgstr ""
+
+msgid "Create Uplink Interface"
+msgstr ""
-msgid "Default 20, range 10-60"
-msgstr "Padrão 20, faixa 10-60"
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
-msgid "Default 3, range 1-10"
-msgstr "Padrão 3, faixa 1-10"
+msgid "Delete"
+msgstr ""
-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 "Delete this Uplink"
+msgstr ""
-msgid "Enable Travelmate"
-msgstr "Habilitar o Travelmate"
+msgid "Device"
+msgstr ""
+
+msgid "EAP-Method"
+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 "Global options"
-msgstr "Opções Globais"
+msgid "Find and join network on"
+msgstr ""
-msgid "Link to detailed advice"
-msgstr "Endereço para conselhos detalhados"
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
-msgid "Max. number of connection retries to an uplink"
-msgstr "Máximo número de tentativas de conexão para um enlace"
+msgid "Force CCMP (AES)"
+msgstr ""
+
+msgid "Force TKIP"
+msgstr ""
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr ""
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+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 "Identity"
+msgstr ""
+
+msgid "Ignore BSSID"
+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 "Max. timeout in seconds for wlan interface reload"
-msgstr "Tempo limite máximo em segundos para recarregar a interface wlan"
+msgid "Move up"
+msgstr ""
-msgid "Restrict reload trigger to certain interface(s)"
-msgstr "Restringir o gatilho de recarga para somente alguma(s) interface(s)"
+msgid "Name of the used uplink interface."
+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"
+msgstr ""
+
+msgid "Password"
+msgstr ""
+
+msgid "Password of Private Key"
+msgstr ""
+
+msgid "Path to CA-Certificate"
+msgstr ""
+
+msgid "Path to Client-Certificate"
+msgstr ""
+
+msgid "Path to Private Key"
+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 "Station ID (SSID/BSSID)"
+msgstr ""
+
+msgid "Station Interface"
+msgstr ""
+
+msgid "Station Radio"
+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 ""
-"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 "Travelmate"
msgstr "Travelmate"
-msgid "Use iw for scanning"
-msgstr "Use o iw para escaneamento"
+msgid "Travelmate Logfile"
+msgstr ""
+
+msgid "Travelmate Status"
+msgstr ""
+
+msgid "Travelmate Version"
+msgstr ""
+
+msgid "Trigger delay"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger interface"
+msgstr ""
+
+msgid "Uplink BSSID"
+msgstr ""
+
+msgid "Uplink SSID"
+msgstr ""
+
+msgid "Uplink interface"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "WEP"
+msgstr ""
+
+msgid "WEP-Passphrase"
+msgstr ""
+
+msgid "WPA"
+msgstr ""
+
+msgid "WPA-Passphrase"
+msgstr ""
+
+msgid "WPA/WPA2"
+msgstr ""
+
+msgid "WPA2"
+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 "error"
+msgstr ""
+
+msgid "hidden"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "not connected"
+msgstr ""
+
+msgid "running"
+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"
diff --git a/applications/luci-app-travelmate/po/ru/travelmate.po b/applications/luci-app-travelmate/po/ru/travelmate.po
new file mode 100644
index 000000000..c6f54d69a
--- /dev/null
+++ b/applications/luci-app-travelmate/po/ru/travelmate.po
@@ -0,0 +1,390 @@
+msgid ""
+msgstr ""
+"Content-Type: text/plain; charset=UTF-8\n"
+"Project-Id-Version: LuCI: travelmate\n"
+"POT-Creation-Date: 2017-12-07 21:00+0300\n"
+"PO-Revision-Date: 2018-01-14 18:14+0300\n"
+"Language-Team: http://cyber-place.ru\n"
+"MIME-Version: 1.0\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Poedit 1.8.7.1\n"
+"Last-Translator: Vladimir aka sunny <picfun@ya.ru>\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"
+"Language: ru\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\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 "Дополнительная задержка в секундах до запуска TravelMate."
+
+msgid "Advanced"
+msgstr "Дополнительно"
+
+msgid "Authentication"
+msgstr "Аутентификация"
+
+msgid "Automatic"
+msgstr "Автоматически"
+
+msgid "BSSID"
+msgstr "BSSID"
+
+msgid "Back to overview"
+msgstr "Вернуться в главное меню"
+
+msgid "Cipher"
+msgstr "Шифрование"
+
+msgid ""
+"Configuration of the travelmate package to to enable travel router "
+"functionality."
+msgstr "Настройка утилиты TravelMate - помощника путешественника. "
+
+msgid "Connection Limit"
+msgstr "Ограничение соединений"
+
+msgid "Create Uplink Interface"
+msgstr "Создать интерфейс сети"
+
+msgid ""
+"Create a new wireless wan uplink interface, configure it to use dhcp and"
+msgstr ""
+"Создать новый wwan интерфейс внешней беспроводной сети, настроить его на "
+"использование с DHCP<br />и "
+
+msgid "Delete"
+msgstr "Удалить"
+
+msgid "Delete this Uplink"
+msgstr "Удалить сеть"
+
+msgid "Device"
+msgstr "Устройство"
+
+msgid "EAP-Method"
+msgstr "Метод EAP"
+
+msgid "Edit"
+msgstr "Редактировать"
+
+msgid "Edit Firewall Configuration"
+msgstr "Настройка config файла firewall"
+
+msgid "Edit Network Configuration"
+msgstr "Настройка config файла network"
+
+msgid "Edit Travelmate Configuration"
+msgstr "Настройка config файла Travelmate"
+
+msgid "Edit Wireless Configuration"
+msgstr "Настройка config файл wireless"
+
+msgid "Edit Wireless Uplink Configuration"
+msgstr "Редактировать настройки беспроводной сети"
+
+msgid "Edit this Uplink"
+msgstr "Редактировать настройки сети"
+
+msgid "Enable 'automatic' mode"
+msgstr "Включить режим 'автоматически'"
+
+msgid "Enable travelmate"
+msgstr "Включить Travelmate"
+
+msgid "Enable verbose debug logging"
+msgstr "Включить подробное ведение журнала отладки"
+
+msgid "Encryption"
+msgstr "Шифрование"
+
+msgid "Extra options"
+msgstr "Дополнительные настройки"
+
+msgid "Find and join network on"
+msgstr "Найти сеть и подключится к ней"
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+"Для получения дополнительной информации <a href=\"%s\" target=\"_blank\"> "
+"смотрите онлайн документацию</a>."
+
+msgid "Force CCMP (AES)"
+msgstr "Назначить CCMP (AES)"
+
+msgid "Force TKIP"
+msgstr "Назначить TKIP"
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr "Назначить TKIP и CCMP (AES)"
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+msgstr ""
+"Принудительно выполнить повторное сканирование/повторное подключение внешних "
+"сетей в режиме 'ручной'."
+
+msgid "How long should travelmate wait for a successful wlan interface reload."
+msgstr ""
+"Временная задержка необходима TravelMate для полной перезагрузки wlan "
+"интерфейса."
+
+msgid "How many times should travelmate try to connect to an Uplink."
+msgstr "Сколько раз TravelMate должен пытаться подключиться к сети. "
+
+msgid "Identity"
+msgstr "Идентификация EAP"
+
+msgid "Ignore BSSID"
+msgstr "Игнорировать BSSID"
+
+msgid "Input file not found, please check your configuration."
+msgstr "Config файл не найден, настройте config файл."
+
+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 ""
+"Поддержка TravelMate в активном состоянии.<br />Проверка состояния "
+"соединения каждые n секунд, т.е. доступность внешней сети."
+
+msgid "Last rundate"
+msgstr "Дата последнего запуска"
+
+msgid "Manual Rescan"
+msgstr "Пересканировать вручную"
+
+msgid "Move down"
+msgstr "Двигаться вниз"
+
+msgid "Move up"
+msgstr "Двигаться вверх"
+
+msgid "Name of the used uplink interface."
+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"
+msgstr "Парольная фраза"
+
+msgid "Password"
+msgstr "Пароль"
+
+msgid "Password of Private Key"
+msgstr "Пароль к Личному Ключу"
+
+msgid "Path to CA-Certificate"
+msgstr "Путь к CA-Сертификатам"
+
+msgid "Path to Client-Certificate"
+msgstr "Путь к Client-Сертификатам"
+
+msgid "Path to Private Key"
+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 ""
+"Общие сведения обо всех настроенных внешних сетевых соединениях интерфейса "
+"TravelMate (%s).<br />Вы можете редактировать, удалять или пере "
+"упорядочивать существующие внешние сети или сканировать их.<br /"
+">Используемое сетевое соединение подчеркнуто синим цветом."
+
+msgid "Radio selection"
+msgstr "Выбор Wi-Fi устройства"
+
+msgid "Repeat scan"
+msgstr "Повторить сканирование"
+
+msgid "Rescan"
+msgstr "Пересканировать"
+
+msgid "Restrict travelmate to a dedicated radio, e.g. 'radio0'."
+msgstr "Выделить TravelMate-у конкретное Wi-Fi устройство, например '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 "Station ID (SSID/BSSID)"
+msgstr "ID (SSID/BSSID) клиента"
+
+msgid "Station Interface"
+msgstr "Интерфейс клиента"
+
+msgid "Station Radio"
+msgstr "Wi-Fi устройство клиента"
+
+msgid ""
+"This form allows you to modify the content of the main firewall "
+"configuration file (/etc/config/firewall)."
+msgstr ""
+"Страница настройки межсетевого экрана, изменение содержимого config файла "
+"firewall настройки межсетевого экрана (/etc/config/firewall)."
+
+msgid ""
+"This form allows you to modify the content of the main network configuration "
+"file (/etc/config/network)."
+msgstr ""
+"Страница настройки сети, изменение содержимого config файла network "
+"настройки сети (/etc/config/network)."
+
+msgid ""
+"This form allows you to modify the content of the main travelmate "
+"configuration file (/etc/config/travelmate)."
+msgstr ""
+"Страница настройки Travelmate, изменение содержимого config файла travelmate "
+"настройки Travelmate (/etc/config/travelmate)."
+
+msgid ""
+"This form allows you to modify the content of the main wireless "
+"configuration file (/etc/config/wireless)."
+msgstr ""
+"Страница настройки беспроводных соединений, изменение содержимого config "
+"файла wireless настройки беспроводных сетей (/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 ""
+"Время ожидания в секундах между повторными попытками соединения в режиме "
+"'автоматически'."
+
+msgid "To disable this feature set it to '0' which means unlimited retries."
+msgstr ""
+"<br />Чтобы отключить эту функцию, установите значение '0', что означает "
+"неограниченное количество попыток."
+
+msgid "Travelmate"
+msgstr "TravelMate"
+
+msgid "Travelmate Logfile"
+msgstr "Системный журнал TravelMate"
+
+msgid "Travelmate Status"
+msgstr "Состояние Travelmate"
+
+msgid "Travelmate Version"
+msgstr "Версия TravelMate"
+
+msgid "Trigger delay"
+msgstr "Задержка запуска"
+
+msgid "Unknown"
+msgstr "Неизвестно"
+
+msgid "Uplink / Trigger interface"
+msgstr "Включить интерфейс<br />внешней сети"
+
+msgid "Uplink BSSID"
+msgstr "BSSID внешней сети"
+
+msgid "Uplink SSID"
+msgstr "SSID внешней сети"
+
+msgid "Uplink interface"
+msgstr "Интерфейс внешней сети"
+
+msgid "View Logfile"
+msgstr "Просмотр системного журнала"
+
+msgid "WEP"
+msgstr "WEP"
+
+msgid "WEP-Passphrase"
+msgstr "Пароль WEP"
+
+msgid "WPA"
+msgstr "WPA"
+
+msgid "WPA-Passphrase"
+msgstr "Пароль WPA"
+
+msgid "WPA/WPA2"
+msgstr "WPA/WPA2"
+
+msgid "WPA2"
+msgstr "WPA2"
+
+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 "connected"
+msgstr "подключен"
+
+msgid "error"
+msgstr "ошибка"
+
+msgid "hidden"
+msgstr "скрытый"
+
+msgid "n/a"
+msgstr "нет данных"
+
+msgid "not connected"
+msgstr "не подключено"
+
+msgid "running"
+msgstr "работает"
diff --git a/applications/luci-app-travelmate/po/templates/travelmate.pot b/applications/luci-app-travelmate/po/templates/travelmate.pot
index 20628196b..aeefa491d 100644
--- a/applications/luci-app-travelmate/po/templates/travelmate.pot
+++ b/applications/luci-app-travelmate/po/templates/travelmate.pot
@@ -1,58 +1,346 @@
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 "Authentication"
+msgstr ""
+
+msgid "Automatic"
+msgstr ""
+
+msgid "BSSID"
+msgstr ""
+
+msgid "Back to overview"
+msgstr ""
+
+msgid "Cipher"
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 "Delete"
+msgstr ""
+
+msgid "Delete this Uplink"
+msgstr ""
+
+msgid "Device"
+msgstr ""
+
+msgid "EAP-Method"
+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 "Default 20, range 10-60"
+msgid "Edit this Uplink"
msgstr ""
-msgid "Default 3, range 1-10"
+msgid "Enable 'automatic' mode"
msgstr ""
-msgid "Disable this if you want to use iwinfo instead of iw"
+msgid "Enable travelmate"
msgstr ""
-msgid "Enable Travelmate"
+msgid "Enable verbose debug logging"
+msgstr ""
+
+msgid "Encryption"
msgstr ""
msgid "Extra options"
msgstr ""
-msgid "Global options"
+msgid "Find and join network on"
+msgstr ""
+
+msgid ""
+"For further information <a href=\"%s\" target=\"_blank\">see online "
+"documentation</a>"
+msgstr ""
+
+msgid "Force CCMP (AES)"
+msgstr ""
+
+msgid "Force TKIP"
+msgstr ""
+
+msgid "Force TKIP and CCMP (AES)"
+msgstr ""
+
+msgid "Force a manual uplink rescan / reconnect in 'trigger' mode."
+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 "Identity"
+msgstr ""
+
+msgid "Ignore BSSID"
+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 used uplink interface."
+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"
msgstr ""
-msgid "Link to detailed advice"
+msgid "Password"
msgstr ""
-msgid "Max. number of connection retries to an uplink"
+msgid "Password of Private Key"
msgstr ""
-msgid "Max. timeout in seconds for wlan interface reload"
+msgid "Path to CA-Certificate"
msgstr ""
-msgid "Restrict reload trigger to certain interface(s)"
+msgid "Path to Client-Certificate"
+msgstr ""
+
+msgid "Path to Private Key"
+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 "Station ID (SSID/BSSID)"
+msgstr ""
+
+msgid "Station Interface"
+msgstr ""
+
+msgid "Station Radio"
+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 ""
-"Space separated list of wwan interfaces that trigger reload action. To "
-"disable reload trigger set it to 'false'. Default: empty"
+"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 Status"
+msgstr ""
+
+msgid "Travelmate Version"
+msgstr ""
+
+msgid "Trigger delay"
+msgstr ""
+
+msgid "Unknown"
+msgstr ""
+
+msgid "Uplink / Trigger interface"
+msgstr ""
+
+msgid "Uplink BSSID"
+msgstr ""
+
+msgid "Uplink SSID"
+msgstr ""
+
+msgid "Uplink interface"
+msgstr ""
+
+msgid "View Logfile"
+msgstr ""
+
+msgid "WEP"
+msgstr ""
+
+msgid "WEP-Passphrase"
+msgstr ""
+
+msgid "WPA"
+msgstr ""
+
+msgid "WPA-Passphrase"
+msgstr ""
+
+msgid "WPA/WPA2"
+msgstr ""
+
+msgid "WPA2"
+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 "error"
+msgstr ""
+
+msgid "hidden"
+msgstr ""
+
+msgid "n/a"
+msgstr ""
+
+msgid "not connected"
+msgstr ""
+
+msgid "running"
msgstr ""