diff options
Diffstat (limited to 'applications/luci-app-wireguard')
10 files changed, 430 insertions, 203 deletions
diff --git a/applications/luci-app-wireguard/Makefile b/applications/luci-app-wireguard/Makefile index ae315bdfe3..417c8ab294 100644 --- a/applications/luci-app-wireguard/Makefile +++ b/applications/luci-app-wireguard/Makefile @@ -10,8 +10,6 @@ LUCI_TITLE:=WireGuard Status LUCI_DEPENDS:=+wireguard-tools +kmod-wireguard +luci-proto-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 index 68a82fe5cc..5a91960974 100644 --- a/applications/luci-app-wireguard/luasrc/controller/wireguard.lua +++ b/applications/luci-app-wireguard/luasrc/controller/wireguard.lua @@ -4,5 +4,5 @@ module("luci.controller.wireguard", package.seeall) function index() - entry({"admin", "status", "wireguard"}, template("wireguard"), _("WireGuard Status"), 92) + 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 index c25ef85caa..6ec9ddb368 100644 --- a/applications/luci-app-wireguard/luasrc/view/wireguard.htm +++ b/applications/luci-app-wireguard/luasrc/view/wireguard.htm @@ -1,224 +1,271 @@ <%# - Copyright 2016-2017 Dan Luedtke <mail@danrl.com> - Licensed to the public under the Apache License 2.0. + Copyright 2016-2017 Dan Luedtke <mail@danrl.com> + Licensed to the public under the Apache License 2.0. -%> <% - local data = { } - local last_device = "" + local uci = uci.cursor() + local data = { } + local last_device = "" + local enc = { } - 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 + local function wg_clean(value) + if value and value == "(none)" then + value = "" + end + return value + end - if luci.http.formvalue("status") == "1" then - luci.http.prepare_content("application/json") - luci.http.write_json(data) - return - end + 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 = { } + } + local s = uci:get_list("network", line[1], "addresses") + local address = "" + local key, value + for key, value in pairs(s) do + if address ~= "" then + address = address.. ", " ..value + else + address = value + end + end + enc[line[1]] = "[Interface]\nPrivateKey = " ..wg_clean(line[2]).. "\nAddress = " ..address + 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 + local ipkey, ipvalue + 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) + enc[line[1]] = enc[line[1]].. "\n\n[Peer]\nEndpoint = " ..wg_clean(line[4]).. "\nPublicKey = " ..wg_clean(line[2]).. "\nAllowedIPs = " ..wg_clean(line[5]) + 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">//<![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 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 + ')'; + } - 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 + ')'; - } + function toggle_qrcode(iface) { + var view = document.getElementById(iface.name); + if (view.style.display === "none") { + view.style.display = "block"; + } else { + view.style.display = "none"; + } + } - 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 /> • ' + 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; - } - } - }); + 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 />  • ' + 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"> +<div class="cbi-section"> <%- +local ikey, iface for ikey, iface in pairs(data) do - -%> - <legend><%:Interface%> <%=ikey%></legend> - <div class="table" width="100%" cellspacing="10"> - <div class="tr"> - <div class="td" width="33%" style="vertical-align:top"><%:Configuration%></div> - <div class="td"> - <div class="table"> - <div class="tr"> - <div class="td" id="<%=ikey%>_icon" style="width:16px; text-align:center; padding:3px"> - - </div> - <div class="td" id="<%=ikey%>_info" style="vertical-align:middle; padding: 3px"> - <em><%:Collecting data...%></em> - </div> - </div></div> - </div> - </div> - <%- - local cur = uci.cursor() - for pkey, peer in pairs(iface.peers) do - local desc, tmp_desc, pub_key = "", "", "" - cur:foreach("network", "wireguard_" .. ikey, function(s) - local tmp_desc, pub_key = "", "" - for key, value in pairs(s) do - if key == "description" then - tmp_desc = value - end - if value == peer.public_key then - pub_key = value - end - if pub_key == peer.public_key and tmp_desc ~= "" then - desc = ': ' .. tmp_desc - end - end - end) - -%> - <div class="tr"> - <div class="td" width="33%" style="vertical-align:top"><%:Peer%><%=desc%></div> - <div class="td"> - <div class="table"> - <div class="tr"> - <div class="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> - </div> - <div class="td" id="<%=ikey%>_<%=peer.public_key%>_info" style="vertical-align:middle; padding: 3px"> - <em><%:Collecting data...%></em> - </div> - </div></div> - </div> - </div> - <%- - end - -%> - </div> - <%- +-%> + <h3><%:Interface%> <%=ikey%></h3> + <div class="cbi-value" id="button" style="padding: 5px"> + <input class="cbi-button cbi-button-apply" type="button" name="qrcode_<%=ikey%>" value="<%:Show/Hide QR-Code%>" onclick="toggle_qrcode(this)" /> + </div> +<%- + local qrcode + if fs.access("/usr/bin/qrencode") then + if enc[ikey]:sub(26, 26) ~= "\n" then + qrcode = luci.sys.exec("/usr/bin/qrencode --inline --8bit --type=SVG --output=- '" ..enc[ikey].. "'") + end + else + qrcode = "<em>For QR-Code support please install package 'qrencode'!</em>" + end +-%> + <div class="cbi-value-title"> + <span class="cbi-value" style="display: none" id="qrcode_<%=ikey%>"><%=qrcode%></span> + </div> + <div class="cbi-section-node"> + <div class="table cbi-section-table"> + <div class="tr cbi-section-table-row" style="text-align: left;"> + <div class="td" style="text-align: left; vertical-align:top"><%:Configuration%></div> + <div class="td" style="flex: 0 1 90%; text-align: left;"> + <div class="table cbi-section-table" style="border: 0px;"> + <div class="tr cbi-section-table-row" style="text-align: left; border: 0px;"> + <div class="td" id="<%=ikey%>_icon" style="width: 22px; text-align: left; border-top: 0px; padding: 3px;"> </div> + <div class="td" id="<%=ikey%>_info" style="flex: 0 1 90%; text-align: left; vertical-align:middle; padding: 3px; border-top: 0px;"><em><%:Collecting data...%></em></div> + </div> + </div> + </div> + </div> + <%- + local cur = uci.cursor() + local pkey, peer + for pkey, peer in pairs(iface.peers) do + local desc + cur:foreach("network", "wireguard_" .. ikey, function(s) + local key, value, tmp_desc, pub_key + for key, value in pairs(s) do + if key == "description" then + tmp_desc = value + end + if value == peer.public_key then + pub_key = value + end + if pub_key and tmp_desc then + desc = ': ' ..tmp_desc + end + end + end) + -%> + <div class="tr cbi-section-table-row" style="text-align: left;"> + <div class="td" style="text-align: left; vertical-align:top"><%:Peer%><%=desc%></div> + <div class="td" style="flex: 0 1 90%; text-align: left;"> + <div class="table cbi-section-table" style="border: 0px"> + <div class="tr cbi-section-table-row" style="border: 0px;"> + <div class="td" id="<%=ikey%>_<%=peer.public_key%>_icon" style="width:16px; text-align: left; padding: 3px;border-top: 0px;"> + <img src="<%=resource%>/icons/tunnel_disabled.png" /> + <small>?</small> + </div> + <div class="td" id="<%=ikey%>_<%=peer.public_key%>_info" style="flex: 0 1 90%; text-align: left; vertical-align:middle; padding: 3px;border-top: 0px;"><em><%:Collecting data...%></em></div> + </div> + </div> + </div> + </div> + <%- + end + -%> + </div> + </div> + <%- end -%> -</fieldset> +</div> <%+footer%> diff --git a/applications/luci-app-wireguard/po/ja/wireguard.po b/applications/luci-app-wireguard/po/ja/wireguard.po index 5cd7a90037..965fac3cf4 100644 --- a/applications/luci-app-wireguard/po/ja/wireguard.po +++ b/applications/luci-app-wireguard/po/ja/wireguard.po @@ -13,62 +13,88 @@ msgstr "" "X-Poedit-Basepath: .\n" "Plural-Forms: nplurals=1; plural=0;\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "許可されたIP" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "データ収集中です..." +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "設定" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "受信済みデータ" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "送信済みデータ" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "エンドポイント" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "ファイアウォール マーク" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "インターフェース" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "インターフェースに公開鍵がありません!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "最新のハンドシェイク" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "待ち受けポート" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "無し" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "ピア" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "永続的なキープアライブ" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "公開鍵" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "WireGuard ステータス" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "時間前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "分前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "1日以上前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 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 index d3b5059d5f..9aea136e1e 100644 --- a/applications/luci-app-wireguard/po/pt-br/wireguard.po +++ b/applications/luci-app-wireguard/po/pt-br/wireguard.po @@ -12,62 +12,88 @@ msgstr "" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "Language: pt_BR\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "Endereços IP autorizados" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "Coletando dados..." +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "Configuração" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "Dados Recebidos" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "Dados Enviados" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "Equipamento do ponto final" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "Marca do Firewall" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "Interface" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "A interface não tem uma chave pública!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "Última Negociação" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "Porta de Escuta" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "Nunca" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "Parceiro" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "Manter Conexões Abertas (Keepalive)" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "Chave Pública" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "Estado do WireGuard" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "horas atrás" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "meses atrás" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "mais de um dia atrás" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 msgid "s ago" msgstr "segundos atrás" diff --git a/applications/luci-app-wireguard/po/ru/wireguard.po b/applications/luci-app-wireguard/po/ru/wireguard.po index 202a49eff4..8f2ad30f48 100644 --- a/applications/luci-app-wireguard/po/ru/wireguard.po +++ b/applications/luci-app-wireguard/po/ru/wireguard.po @@ -13,62 +13,88 @@ msgstr "" "Project-Info: Это технический перевод, не дословный. Главное-удобный русский " "интерфейс, все проверялось в графическом режиме, совместим с другими apps\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "Разрешенные IP-адреса" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "Сбор данных..." +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "Настройка config файла" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "Полученные данные" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "Переданные данные" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "Конечная точка" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "Метка межсетевого экрана" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "Интерфейс" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "Интерфейс не имеет Публичного Ключа!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "Последний Хендшейк" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "Порт для входящих соединений" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "Никогда" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "Узел" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "Постоянные Проверки Активности" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "Публичный Ключ" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "Состояние WireGuard" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "час назад" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "минуту назад" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "более суток назад" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 msgid "s ago" msgstr "секунду назад" diff --git a/applications/luci-app-wireguard/po/sv/wireguard.po b/applications/luci-app-wireguard/po/sv/wireguard.po index 3422ae91e9..80e18e6941 100644 --- a/applications/luci-app-wireguard/po/sv/wireguard.po +++ b/applications/luci-app-wireguard/po/sv/wireguard.po @@ -1,62 +1,88 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "Tillåtna IP-adresser" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "Samlar in data..." +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "Konfiguration" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "Mottagen data" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "Överförd data" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "Slutpunkt" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "Brandväggsmarkering" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "Gränssnitt" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "Gränssnittet har inte en publik nyckel!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "Senaste handskakning" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "Lyssningsport" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "Aldrig" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "Jämlike" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "Hålla vid liv ständigt" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "Publik nyckel" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "Status för WireGuard" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "t sedan" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "m sedan" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "över en dag sedan" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 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 index 9ec5c60048..28fa83353b 100644 --- a/applications/luci-app-wireguard/po/templates/wireguard.pot +++ b/applications/luci-app-wireguard/po/templates/wireguard.pot @@ -1,62 +1,88 @@ msgid "" msgstr "Content-Type: text/plain; charset=UTF-8" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 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 index 38fd784b12..3d173e596b 100644 --- a/applications/luci-app-wireguard/po/zh-cn/wireguard.po +++ b/applications/luci-app-wireguard/po/zh-cn/wireguard.po @@ -15,62 +15,88 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "Language: zh_CN\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "允许的 IP" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "正在收集数据…" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "配置" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "已接收" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "已发送" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "传输端点" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "防火墙标识" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "接口" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "接口没有配置公钥!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "上次握手" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "监听端口" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "从不" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "对端" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "Keepalive 间隔(秒)" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "公钥" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "WireGuard 状态" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "小时前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "分钟前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "超过一天前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 msgid "s ago" msgstr "秒前" diff --git a/applications/luci-app-wireguard/po/zh-tw/wireguard.po b/applications/luci-app-wireguard/po/zh-tw/wireguard.po index 66fd9649e6..84953036e6 100644 --- a/applications/luci-app-wireguard/po/zh-tw/wireguard.po +++ b/applications/luci-app-wireguard/po/zh-tw/wireguard.po @@ -15,62 +15,88 @@ msgstr "" "Plural-Forms: nplurals=1; plural=0;\n" "Language: zh_TW\n" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:157 msgid "Allowed IPs" msgstr "允許的 IP" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:222 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:256 msgid "Collecting data..." msgstr "正在收集資料…" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:217 msgid "Configuration" msgstr "配置" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:178 msgid "Data Received" msgstr "已接收" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:179 msgid "Data Transmitted" msgstr "已傳送" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:152 msgid "Endpoint" msgstr "傳輸端點" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:139 msgid "Firewall Mark" msgstr "防火牆標識" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:197 msgid "Interface" msgstr "介面" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:124 msgid "Interface does not have a public key!" msgstr "介面沒有配置公鑰!" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:174 msgid "Latest Handshake" msgstr "上次握手" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:133 msgid "Listen Port" msgstr "監聽埠" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:89 msgid "Never" msgstr "從不" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:248 msgid "Peer" msgstr "對端" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:164 msgid "Persistent Keepalive" msgstr "Keepalive 間隔(秒)" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:127 +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:147 msgid "Public Key" msgstr "公鑰" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:199 +msgid "Show/Hide QR-Code" +msgstr "" + +#: applications/luci-app-wireguard/luasrc/controller/wireguard.lua:7 msgid "WireGuard Status" msgstr "WireGuard 狀態" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:99 msgid "h ago" msgstr "小時前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:97 msgid "m ago" msgstr "分鐘前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:101 msgid "over a day ago" msgstr "超過一天前" +#: applications/luci-app-wireguard/luasrc/view/wireguard.htm:95 msgid "s ago" msgstr "秒前" |